2016-04-04 16 views
0


Bunun çok fazla geldiğini biliyorum, ama burada arama yaptım ve aradığımı tam olarak çözemedim.
Bir dizinin belirli bir nesneyi içerip içermediğini kontrol edin

device_names = [ 
{ 
    address: 'XX:XX:XX:XX:XX:XX', 
    name: 'device name' 
}, 
    { 
    address: 'XX:XX:XX:XX:XX:XX', 
    name: 'device name' 
}] 

İstediğim şey bu varsa bu dizi belirli bir adresle birlikte cihazı içerir ve gerçek döndürür olup olmadığını kontrol etmektir:
yüzden, ben aşağıdaki değerleri içeren nesneler dizisi var. , $.inArray önermeyin, çünkü her zaman nesneler dizisiyle kullanıldığında -1 döndürün.

+0

Ben lodash veya alt çizgi öneriyoruz, onlar gibi şeyler için büyük fonksiyonları var. Tabii ki ben de sade javascriptte yapabilirsin, jquery'ye ihtiyacın yok. Ben böyle bir şey için lodashs '_.find' seviyorum. Düz js için - bu konuya göz at http://stackoverflow.com/questions/8217419/how-to-determine-if-javascript-array-contains-object – ajmajmajma

+1

ilkini bulmak için bir dizi yineleyen bir işlevi yazmak kolay belirli bir nesnenin oluşumu. belki birisinin senin için yazabileceğini mi düşünüyorsun? –

+1

Olası çoğaltılabilir [JavaScript nesnesinin bir dizisinde nesneye göre bul] (http://stackoverflow.com/questions/7364150/find-object-by-id-in-an-array-of-javascript-objects) – Shanimal

cevap

0

Dizide dolaşın, adresin eşleşip eşleşmediğini kontrol edin, eğer öyleyse true değerini döndürün. Eğer underscore.js kullanmaya hazırsanız

function checkAddress(address) { 
    for (var i = 0; i<device_names.length; i++) { 
     if (device_names[i].address == address) { 
      return true 
     } 
    } 
} 
-1

:

function deepFind(array, needle) { 
    return _.findIndex(array, function(value) { 
     return _.isEqual(value, needle); 
    }); 
} 

Kullanımı:

deepFind(device_names, { 
      address: 'XX:XX:XX:XX:XX:XX', 
      name: 'device name' 
}); 

O verilen cihaz bulunduğu noktada ilk indeksi döndürür. Eğer biri yoksa -1 döndürecektir.

if(deepFind(...) > -1) 
    console.log("The device is found."); 
+0

Alternatif büyük kütüphaneler önermek genellikle yararlı sayılmaz. – isherwood

+0

Örnek kod kopyalayacaksanız, lütfen cevaba göre uyarlayın. – ajmajmajma

+0

Örnek kodla ne demek istiyorsun? Teklif ettiğim işlev tam olarak ihtiyaç duyulan şeyi yapar. Bir dizide, verilen iğneye eşit olan bir nesne bulur. – Toonijn

0

Bunun yerine $ .grep kullanabilir misiniz? Böyle

şey ... $ .grep (device_names, function (d) {return d.address == "XX: XX: XX: XX: XX: XX";})

0

yapabilirsiniz adresleri başka bir diziye eşleme oluşturmak ve dizinde bir adres olup olmadığını görmek için indexOf kullanın.

var device_names = [ 
{ 
address: '11:XX:XX:XX:XX:XX', 
name: 'device name' 
}, 
{ 
address: '22:XX:XX:XX:XX:XX', 
name: 'device name' 
}] 

var device_addresses = device_names.map(function(obj){  
    return obj.address; 
}); 


device_addresses.indexOf("22:XX:XX:XX:XX:XX"); // returns 1 
İlgili konular