10

特定のアイテムが存在する場合 (私の場合は ID 2 の MachineId)、オブジェクトの配列をチェックインするにはどうすればよいですか?

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

私はこれを試しました:

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

6 に答える 6

13

クロスブラウザの方法では、jQuery.grep()メソッドを使用できます。

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

if (item.length) {
    alert("value is Array!");
}
于 2012-11-29T13:51:25.250 に答える
5

解決策を理解する最も簡単な方法は、配列をループして、それぞれをチェックすることです。

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

一致する項目が複数ある場合は、最後の項目が返されることに注意してください。これを関数でドレスアップすることもできます。

function findByMachineId(ary, value) {
   var match;
    for (var i = 0; i < ary.length; i++) {
       if (ary[i].MachineId == value) 
            match = ary[i];
    }
    return match;
}
于 2012-11-29T13:49:38.183 に答える
4

多くの標準的なソリューションがあり、サードパーティのライブラリや繰り返しループは必要ありません。

たとえば、some();を使用します。

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)

配列someメソッドは 2 つのパラメーターを受け入れます。

  • callback - 各要素をテストする関数。
  • thisObject - コールバックの実行時に this として使用するオブジェクト。

コールバック関数は反復コードと結合されておらず、thisObject パラメーターを使用して、見つかった要素またはその他のデータを呼び出し元に返すこともできます。そのような要素が見つかった場合、some すぐに true を返します

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

于 2012-11-29T13:56:03.713 に答える
2

この時点で古い質問ですが、Array.findを使用する ES6 ソリューションは次のとおりです。

let machine2 = machines.find((machine) => machine.id === '2');
if (machine2) {
    // ...
}
于 2015-12-10T00:57:25.973 に答える
1

この条件を使用できます。

if (arr.filter(function(v){return this.MachineID == 2;}).length > 0)
于 2012-11-29T13:50:24.657 に答える