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方法接受两个参数:

  • 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 回答
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"}]
于 2016-09-06T11:48:31.367 回答