2017-03-03 12 views
8

मेरे सरणी इस तरह दिखता है के आधार पर सरणी से बाहर वस्तु लें:टाइपप्रति - विशेषता मान

array = [object {id: 1, value: "itemname"}, object {id: 2, value: "itemname"}, ...] 

मेरे सभी वस्तुओं एक ही attibutes है, लेकिन विभिन्न मूल्यों के साथ।

वहाँ एक आसान तरीका मैं उस सरणी के लिए एक WHERE कथन का उपयोग कर सकते है?

वस्तु ले लो जहां object.id = वर

या मैं सिर्फ और पूरे सरणी पर पाश की जरूरत है हर आइटम की जाँच करते हैं? मेरे सरणी 100 से अधिक प्रविष्टियां हैं, तो मैं अगर वहाँ एक अधिक कुशल तरीका

उत्तर

1

मैं filter या reduce का उपयोग होता था जानना चाहता था:

let array = [ 
    { id: 1, value: "itemname" }, 
    { id: 2, value: "itemname" } 
]; 

let item1 = array.filter(item => item.id === 1)[0]; 
let item2 = array.reduce((prev, current) => prev || current.id === 1 ? current : null); 

console.log(item1); // Object {id: 1, value: "itemname"} 
console.log(item2); // Object {id: 1, value: "itemname"} 

(code in playground)

आप परवाह करते हैं पूरे सरणी पर पुनरावृत्ति तो का उपयोग some:

let item; 
array.some(i => { 
    if (i.id === 1) { 
     item = i; 
     return true; 
    } 
    return false; 
}); 

(code in playground)

+3

सरणी एक विधि खोज() https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ कि पहली घटना रिटर्न है –

+0

@ JánHalaša यह सच लगता है, मुझे लगता है कि एक के बारे में भूल गया, तो आप उस पोस्ट के एक जवाब के रूप। मैं इसके लिए वोट दूंगा। –

1

आप सरणी पर पाश करना होगा, लेकिन अगर आप एक सूचकांक करने के लिए प्रत्येक आईडी लिंक और उस को बचाने के लिए एक hashmap बनाने के लिए, आप केवल एक बार क्या करना है, तो आपको लगता है कि सीधे के बाद किसी भी objeft देख सकते हैं:

var idReference = myArray.reduce(function(map, record, index) { 
    map[ record.id ] = index; 
    return map; 
}, {}); 

var objectWithId5 = myArray[ idReference["5"] ]; 

यह मान करता है सब आईडी हालांकि अद्वितीय हैं।

+1

वहाँ एक मानचित्र वर्ग बनाने कि और अधिक कुशल डेटा संरचना https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map –

+0

निश्चित रूप से के लिए इस्तेमाल किया जा सकता है। एक बार जब हम आईई एज में अपग्रेड करते हैं या आधुनिकता का उपयोग करने का निर्णय लेते हैं तो इसका उपयोग करने के लिए तत्पर हैं। कम करें और ऐसे में अधिक व्यापक रूप से समर्थित हैं। प्रत्येक ऑब्जेक्ट को संदर्भित करने के लिए कोड लंबा हो सकता है, क्योंकि आप इसके लिए .get() का उपयोग करेंगे। ओपी के लिए हालांकि मैट नहीं होगा, क्योंकि यह वैसे भी इस संरचना को संकलित करेगा। – Shilly

0

आप टाइपप्रति गतिशील का उपयोग कर ऑब्जेक्ट की श्रेणी में एक निश्चित मूल्य से खोज सकते हैं अगर आप के सभी क्षेत्रों से मूल्य खोज करने की आवश्यकता स्तंभ निर्दिष्ट किए बिना वस्तु

var searchText = 'first'; 

let items = [ 
      { id: 1, name: "first", grade: "A" }, 
      { id: 2, name: "second", grade: "B" } 
     ]; 

This below code will search for the value 

var result = items.filter(item => 
      Object.keys(item).some(k => item[k] != null && 
      item[k].toString().toLowerCase() 
      .includes(searchText.toLowerCase())) 
      ); 

एक ही दृष्टिकोण इस्तेमाल किया जा सकता पहुंच AngularJS 4 टाइपप्रति का उपयोग करने में ईए सर्च फ़िल्टर पाइप

संबंधित मुद्दे