2012-03-14 68 views
0

我已經嘗試了很多事情要得到這個工作正常,但我不能數組內的對象查找鍵的值 - 的JavaScript

這裏是我的問題:

我有對象的數組JavaScript的這看起來是這樣的:

var myArrOfObjs = []; 
var myObject1 = {}; 
myObject1.key = '1234'; 
myObject1.label = 'Richard Clifford'; 

myArrOfObjs.push(myObject1); 

,我需要做的是這樣的:

if(!containsObject(myObject1, myArrOfOjbs)){ 
    // Do stuff 
} 

我需要containsObject功能找到的對象(如果有的話)內檢查鍵值,所以如果containsObject(myObject1, myArrOfOjbs)找到對象,我需要檢查,看看是否的,關鍵是一樣的一個目前我試圖推。

的原因,我需要它來檢查的鑰匙,是因爲我已經試過這個功能,我發現其他地方在計算器上,但它不太工作。

function containsObject(obj, list) { 
    var i; 
    for (i = 0; i < list.length; i++) { 
     if (list[i] == obj) { 
      return true; 
     } 
    } 

    return false; 
} 

它仍然推動對象數組,即使它已經包含的對象。

請讓我知道如果你需要任何清理,我知道這是不是讀/最容易理解的文章。

謝謝!

+0

如何使用散列表? – GNi33 2012-03-14 13:35:51

+0

這個containsObject方法應該可以工作。調用代碼可能存在問題。你能否展示它(如果可能的話,讓一個自治的簡化代碼顯示問題)? – 2012-03-14 13:36:21

回答

3

您需要更改相等測試來比較鍵:

function containsObject(obj, list) { 
    var i; 
    for (i = 0; i < list.length; i++) { 
     if (list[i].key === obj.key) { 
      return true; 
     } 
    } 

    return false; 
} 
+0

完美運作。顯示我對javascript的瞭解程度。我只是剛剛開始學習它。非常感謝!非常感激! – DarkMantis 2012-03-14 13:49:25

1

我有這個功能被添加到陣列的對象的原型鏈,所以你可以叫list.hasObject(obj)

Array.prototype.hasObject = (
    !Array.indexOf ? function (o) 
    { 
    var l = this.length + 1; 
    while (l -= 1) 
    { 
     if (this[l - 1] === o) 
     { 
      return true; 
     } 
    } 
    return false; 
    } : function (o) 
    { 
    return (this.indexOf(o) !== -1); 
    } 
); 

這個小小提琴:http://jsfiddle.net/NE9kx/

+0

很好的回答,但我已經與上述一個。不管怎麼說,還是要謝謝你! – DarkMantis 2012-03-14 13:49:38

1

也許這不是你要找的答案,但我不知道爲什麼不使用,而不是一個數組的對象,如果你有一個關鍵:

var objectList = {}; 

var myObject { key : '1234', label : 'Richard Clifford' }; 

objectList[myObject.key] = myObject; 

所以,如果你想要遍歷:

for (var key in objectList) { 
    if (objectList.hasOwnProperty(key) 
     alert(key); 
} 

如果您要訪問的OBJ等給你一個關鍵只要:

alert(objectList['1234'].label); 
+0

之所以是由於它我寫一個擴展的第三方軟件,它使用對象的數組。感謝您對未來參考的建議,我將使用對象:) – DarkMantis 2012-03-14 15:52:13