2011-12-23 15 views
8

यहां क्या हो रहा है, इस बारे में काफी जानकारी नहीं है। सरणी को देखते हुए (आगमन):ऑब्जेक्ट्स और इंडेक्स की सरणी के साथ जावास्क्रिप्ट अजीबता

[ 
    { 
     "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) वापसी -1 (खासकर जब से मैं इसे 'आईडी' पैरामीटर पहले का उपयोग सरणी से वस्तु को पुनः प्राप्त समारोह में)?

+0

आपका क्या मतलब है "समारोह में इससे पहले"? आपको हमें वह कोड दिखाना होगा जो आपने लिखा था जो कुछ JSON नहीं, विफल रहता है। – Incognito

+0

क्या आप जिस वास्तविक कोड का उपयोग कर रहे हैं उसे पोस्ट कर सकते हैं, और/या इसे fsFiddle पर रख सकते हैं? – jefflunt

+4

ऐसा इसलिए है क्योंकि '({a: 12}) === ({a: 12})' 'false 'है। जावास्क्रिप्ट में ऑब्जेक्ट बराबर हैं यदि वे एक ही ऑब्जेक्ट (समान संदर्भ) हैं, न केवल वही मान। –

उत्तर

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