2012-11-17 154 views
-3

我試圖設置一個InArray與對象,但它不工作在數組JavaScript對象

var test = {aa:1, bb:0} 
console.log($.inArray(1,test)) 

我總是有-1

感謝

+2

這是因爲這不是一個數組。而且它也不是一個對象。 – j08691

+2

因爲'test'不是一個數組。一個數組看起來像'var test = [1,0,...]' - 你不能在JavaScript中擁有關聯數組。 –

+0

它甚至是一個有效的語法? –

回答

3
{} = object literal 

[] = array object 

$.inArray設計用於處理數組。正如你已經想出的那樣,它不能正確地與對象一起工作(無論情況如何,它都會返回-1)。說到對象,用於創建對象字面值的語法是不合格的,它不會被編寫爲{ a = b },而是被編寫爲{ a : b }。這裏有一個例子:

var test = { aa: 1, bb: 0 }; 

我也看到你正在試圖找到某個對象的屬性有一定,而不是該對象有屬性的。如果是後者,我們將使用in關鍵字或.hasOwnProperty函數。但我們需要爲您的情況製作自己的功能。試試這個:

var inObject = function(obj, val) { 

    for (var i in obj) { 

     if (obj.hasOwnProperty(i)) { 

      if (obj[i] === val) return true; 

     } 

    } 

    return false; 

}; 

,我們會使用這樣的:

>>> var test = { aa: 1, bb: 0 }; 

>>> inObject(test, 1); 
    true 
+1

謝謝,那是wokrs :) – Ajouve

2

在你的代碼」重新做別的事。實際上你正在嘗試創建一個對象,使用對象字面值,它具有屬性aabb。鑰匙是aabb而不是0,1。如果你希望你的關鍵是0

var test = { aa:1, bb:0 }; 
console.log('aa' in test); //true 

1你可以嘗試:你可以試試這個

var test = { 1: 'aa', 0: 'bb' }; 
console.log(1 in test); //true 

而且你還可以:

var test = { 1: 'aa', 0: 'bb' }; 
console.log(test['1']); //"aa" 

如果你想檢查對象是否僅包含一個值:

function containsValue(obj, key) { 
    for (var prop in obj) { 
     if (obj[prop] === key) { 
      return true; 
     } 
    } 
    return false; 
} 
var test = { aa:1, bb:0 }; 
console.log(containsValue(test, 1)); //true 
+0

是的這不是這就是爲什麼我編輯它並在我的答案是:'{aa:1,bb:0};':-) –

+0

是的,但這是一個阿賈克斯結果,我不能輕易改變它 – Ajouve

+0

所以你正在做一個阿賈克斯請求, '{aa = 1,bb = 0}'? –