2012-11-29 16 views
9

Belirli bir öğe varsa, nesneler dizilimimi nasıl kontrol edebilirim (benim durumumda 2 ile MachineId)? JavaScript nesnesinde değer bulunup bulunmadığını kontrol edin

[{"MachineID":"1","SiteID":"20"},{"MachineID":"2","SiteID":"20"},{"MachineID":"3","SiteID":"20"},{"MachineID":"4","SiteID":"20"}] 

I güvenilir bu:

if (index instanceof machineIds.MachineID) { 
    alert('value is Array!'); 
} else { 
    alert('Not an array'); 
} 

cevap

11

:

var item = $.grep(machineIds, function(item) { 
    return item.MachineID == index; 
}); 

if (item.length) { 
    alert("value is Array!"); 
} 
5

çözelti dizisi üzerinde döngü olduğunu anlamak ve her biri kontrol etmek için basit.

var match; 
for (var i = 0; i < yourArray.length; i++) { 
    if (yourArray[i].MachineId == 2) 
     match = yourArray[i]; 
} 

Birden fazla eşleşen öğe varsa, bu sonuncuyu döndürecektir. Bunu ayrıca bir fonksiyonda da yapabilirsiniz.

function findByMachineId(ary, value) { 
    var match; 
    for (var i = 0; i < ary.length; i++) { 
     if (ary[i].MachineId == value) 
      match = ary[i]; 
    } 
    return match; 
} 
Bu durumun kullanabilirsiniz
+0

belirtildiği için veri, '2' yerine' '2' 'ile karşılaştırmalısınız. –

+0

Aranan değer sayısalsa işe yaramayacağım. – VisioN

+0

Veya bunu işaret etmek için '=' işaretlerinden birini –

1

: bunun için jQuery.grep() yöntemini kullanabilir çapraz tarayıcı şekilde

if (arr.filter(function(v){return this.MachineID == 2;}).length > 0) 
+0

IE üzerinde çalışmaz <= 8 [Sigh] –

+0

@SalmanA Ancak çok şık görünüyor :( –

3

IMHO, sizin gibi üçüncü parti kütüphaneleri gerek yok jQuery veya döngü üzerinde yinelemeli olarak döngü. Burada ihtiyaç duyduğumuz şeyi yapan JavaScript Array some method var. Her element için test etmek Fonksiyonu -

  • geri arama:

    var yourArray = [{"MachineID":"1","SiteID":"20"},{"MachineID":"2","SiteID":"20"},{"MachineID":"3","SiteID":"20"},{"MachineID":"4","SiteID":"20"}]; 
    
    var params = {searchedID: "2", elementFound: null}; 
    var isCorrectMachineID = function(element) { 
        if (element.MachineID == this.searchedID); 
         return (this.elementFound = element); 
        return false; 
    }; 
    
    var isFound = yourArray.some(isCorrectMachineID, params) 
    

    Dizisi some yöntem iki parametre kabul eder.

  • thisObject - Geri arama yürütülürken bu nesne kullanılır.

Geri arama işlevi yineleme koduyla birleştirilmez ve thisObject parametresi kullanılarak arayana bulunan veya daha fazla veri arayan kişiye dönebilirsiniz. Böyle bir eleman bu noktada

http://jsfiddle.net/gu8Wq/1/

+0

Chrome 46'da denendi. Prototipte görülemiyor. Bu işlev tüm tarayıcılarda gerçekten kullanılabilir mi? –

+0

Lütfen bir göz atın Burada: http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.17 ve burada: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/some # Browser_compatibility – freedev

1

Eski soru somehemen döner doğru bulunursa, ama burada Array.find kullanan bir ES6 çözüm buysa:

let machine2 = machines.find((machine) => machine.id === '2'); 
if (machine2) { 
    // ... 
} 
+0

Bunun, tüm IE'de ve mobil tarayıcıların yarısında (Kasım 2016 itibarıyla) ÇALIŞMAZ: [MDN Array.find tarayıcı uyumluluğu] (https: //developer.mozilla) .org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Find # Browser_compatibility) – Zanshin13

+1

Elbette, ES6 kullanıyorsanız, Babel (veya bazı karşılaştırılabilir transpiler kullanıyor olmalısınız. – ericsoco

0
var item = [{"MachineID":"1","SiteID":"20"},{"MachineID":"2","SiteID":"20"},{"MachineID":"3","SiteID":"20"},{"MachineID":"4","SiteID":"20"}]; 

var newItem = item.filter(function(i) { 
    return i.MachineID == 2; //it will return an object where MachineID matches with 2 
}); 

console.log(newItem); // will print [{"MachineID":"2","SiteID":"20"}] 
+1

Lütfen kodunuzun çalışmasını açıklayın veya açıklayıcı açıklamaları kullanın! –

İlgili konular