2011-06-04 21 views
16
var set = [{"color":"blue"},{"color":"green"},{"color":"red"},{"color":"green"}]; 

Bir db çağrısı, set.find({"color":"green"}) gibi bir şey yapabilmek ve bu özelliği içeren nesnelerle dolu bir dizi döndürmek istiyorum. Array#filter kullanmaBir nesne dizisinde eşleşen nesneleri bulma?

+1

Zaten örnek bütün nesneyi dönmez Yani http://stackoverflow.com/questions/1820593/search-a-javascript-object –

+0

cevap , yapar? – fancy

+1

Bunun jQuery ile alakası yok, bu yüzden bu etiketi kaldırmalısınız. Bu tamamen bir JavaScript sorusu. – Domenic

cevap

38

, bu özel durum için kod

var results = set.filter(function (entry) { return entry.color === "green"; }); 

Array#filter bazı eski tarayıcılarda uygulanmadı gibi görünecektir, bu yüzden bir geriye dönük uyumluluk şiminin bağlantılı makalesine bakın veya daha iyisi a full-fledged ES5 shim olsun. , Yine

function findByMatchingProperties(set, properties) { 
    return set.filter(function (entry) { 
     return Object.keys(properties).every(function (key) { 
      return entry[key] === properties[key]; 
     }); 
    }); 
} 

var results = findByMatchingProperties(set, { color: "green" }); 

Ben ECMAscript 5 yöntemler Object.keys ve Array#every kullanarak, bu nedenle ES5 dolgusu kullanmak am: daha genel durum için

, bu fikrin uzanan meselesi. (. Kod bir ES5 altlığına sahip olmayan yapılabilir ama el döngü kullanır ve yazmak ve okumak için çok daha az eğlenceli)

+0

Saf ES5 kullanmayı umursamıyorum, bu sunucuda. – fancy

+4

Daha sonra jQuery etiketini eklediğinizi bile unutmayın. – Domenic

+0

Bu yöntem nasıl görünüyor? temel olarak faux db işlevi oluşturmak isteyen set.find ({color: "green"}). – fancy

2

jQuery etiketi yer verdik beri burada kullanarak bunu yapmak için bir yolu jQuery en map:

var results = $.map(set, function(e,i){ 
    if(e.color === 'green') return e; 
}); 

Belge, öğeyi diziden kaldırmak için null döndürmeniz gerektiğini bildirmektedir, ancak görünüşte bu, jsFiddle tarafından yorumlarda gösterildiği gibi yanlıştır; hiçbir şey döndürmez (yani undefined'u döndürür), aynı şekilde çalışır.

+1

Bu, [undefined, {color: "green"}, undefined, undefined] 'döndürecektir. – Domenic

+0

@Domenic, http://jsfiddle.net/redler/FXRf8/ –

+1

@Ken Redler, Ben düzeltilmeyi bekliyorum. '$ .map' için belgeleme, yalnızca 'null' değerini döndürdüğünüzde öğeyi kaldıracağını söylüyor, ancak sanırım 'undefined' de tanıyor. Yine de, genellikle bunun için '$ .grep' kullanmak isteyeceğinizi düşünüyorum. – Domenic

0

Harita işlevini jquery'den kullandım ve bu indeksi kullanarak diziden istenen nesneyi alabilmemiz için aranan anahtar değerini geçerek seçili dizini alıyorum.

var mydata = [{ name: "Ram", Id: 1 }, { name: "Shyam", Id: 2 }, { name: "Akhil", Id: 3 }]; 

searchKey = 2 

var mydata = [{ name: "Ram", Id: 1 }, { name: "Shyam", Id: 2 }, { name: "Akhil", Id: 3 }]; 
 

 
searchKey = 2 
 

 
var selectedData = mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey)]; 
 

 
console.log(selectedData)

var selectedData = mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey)]; 

console.log(selectedData) 

output 
{ name: "Shyam", Id: 2 } 

Note: if you want to pass search key as object then 
searchKey = { Id: 2 }; 

mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey.Id)]; 

output 
{ name: "Shyam", Id: 2 } 
İlgili konular