2017-03-03 47 views
8

Benim dizisi şöyle özelliği değerine bağlı olarak dizinin dışarı nesneyi atın.typescript

Bu dizinin WHERE deyimini kullanmanın kolay bir yolu var mı?

nesneyi almak nerede object.id = var

ya da sadece tüm dizi boyunca döngü gerekiyor ve her öğeyi kontrol ederim? Benim dizisi 100 yılı girişler var, bu yüzden

cevap

1

Ben filter veya reduce kullanmayı tercih ediyorum daha verimli bir yol olup olmadığını bilmek istedi: Eğer önem veriyorsanız

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)

tüm dizi yineleme sonra kullanmak some:

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

(code in playground)

+3

Array, ilk geçişi veren bir find() yöntemine sahiptir. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/ –

+0

@ JánHalaša'yı bul Doğru, onu unutmuşum, bunu bir cevap olarak göndermelisin. Bunun için oy vereceğim. –

1

Dizinin üstünden geçmeniz gerekir, ancak her kimliği bir dizine bağlamak ve kaydetmek için bir hasassp yaparsanız, bunu yalnızca bir kez yapmanız gerekir, böylece herhangi bir itirazı doğrudan bundan sonra kullanabilirsiniz:

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

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

Bu, tüm kimlikleri olsa benzersizdir kabul etmez.

+1

Daha verimli veri yapısını oluşturmak için kullanılabilecek bir Harita sınıfı var https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map –

+0

Kesinlikle. IE Edge'e yükselttiğimizde veya modernizr kullanmaya karar verdiğimizde bunu kullanmayı sabırsızlıkla bekliyoruz. Azaltın ve daha yaygın olarak desteklenir. Her nesneyi başvurulan kod daha uzun olabilir, çünkü bunun için .get() öğesini kullanırsınız. Yine de matlaşmayacak olan OP için, bu yapıya yine de derler. – Shilly

0

dinamik typescript kullanarak nesnelerin dizide belirli bir değeri arama yapabilirsiniz sütun belirtmeden nesne

aynı yaklaşım kullanılabilir

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())) 
      ); 
mak ea Search Filter Pipe'i angularjs 4 kullanarak TypeScript