2011-12-23 7 views
8

ここで何が起こっているのかよく分かりません。オブジェクトの配列とindexOfのJavascriptの奇妙さ

[ 
    { 
     "first_name": "Dan", 
     "last_name": "Woodson", 
     "id": 1 
    }, 
    { 
     "first_name": "Jen", 
     "last_name": "Woodson", 
     "id": 2 
    }, 
    { 
     "first_name": "Yoshi", 
     "last_name": "Woodson", 
     "id": 3 
    } 
] 

とオブジェクト(OBJ):

{ 
    "first_name": "Yoshi", 
    "last_name": "Woodson", 
    "id": 3 
} 

なぜarr.indexOf(obj)私はそれが以前の 'ID'、パラメータの使用して配列からオブジェクトを取得し、特に以来(-1を返す配列(ARR)を考えます関数内で)?

+0

を使用すると、「以前の機能で」何を意味するのですか?以下が真であるため、あなたが書いたコードは、JSONだけでなく、失敗したことを示す必要があります。 – Incognito

+0

使用している実際のコードを投稿したり、fsFiddleに入れたりできますか? – jefflunt

+4

'({a:12})===({a:12})'は 'false'です。 JavaScript内のオブジェクトは、同じ値でなく、同じオブジェクト(同じ参照)であれば等しいです。 –

答えて

5

Array.indexOf()は、指定されたオブジェクトがと同じオブジェクトである場合は、と同じオブジェクトでのみ動作します。

正確なコピーが不足している、それはまったく同じオブジェクトなければならない、すなわち、配列内のいくつかのオブジェクトが存在しなければならないよう:

arr[i] === obj 

はあなたが取得した方法を示す必要がありますオブジェクト。

1

私はリトリーブ機能を見たいと思いますが、おそらくあなたは同じ参照を使用していません。

var a = {id: 3}; 
var b = [a]; 
b.indexOf(a); // 0 
a.id = "not three"; 
b.indexOf(a); // still 0 

ただし、以下が解除されます::

var a = {id: 3}; 
var b = [{id: 3}]; 
b.indexOf(a); // -1 not the same object 
関連する問題