2012-03-14 9 views
0

私はこれが正常に機能し得るために多くのことを試してみましたが、私はここで - 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)がオブジェクトを検出した場合、そのキーが現在プッシュしようとしているキーと同じかどうかを確認する必要があります。

私はキーをチェックする必要がある理由は、私はStackOverflow上でどこに他のものを見つけたが、それはかなり機能していないこの機能を試したからです。

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

    return false; 
} 

まだオブジェクトが含まれていても、オブジェクトはまだ配列にプッシュされます。

あなたが何かをクリアする必要がある場合は教えてください、私はそれが読んで/理解するのが最も簡単なポストではないことを認識しています。

ありがとうございます!

+0

ハッシュテーブルを使用する方法について教えてください。 – GNi33

+0

これは、containsObjectメソッドが機能するはずです。おそらく、呼び出しコードに問題があります。あなたはそれを表示することができますか(できるだけ問題を表示する自律的な削減コードを作ってください)? –

答えて

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

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

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