如果存在特定项目(在我的案例中,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');
}
答案 0 :(得分:13)
在浏览器中,您可以使用jQuery.grep()
方法:
var item = $.grep(machineIds, function(item) {
return item.MachineID == index;
});
if (item.length) {
alert("value is Array!");
}
答案 1 :(得分: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;
}
答案 2 :(得分:4)
有许多标准解决方案,您不需要第三方库或迭代循环。
some
method - 自JavaScript 1.6。find
method - 自ES6以来findIndex
method - 自ES6以来例如,使用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
方法接受两个参数:
回调函数不与迭代代码耦合,使用thisObject参数,您甚至可以返回调用者找到的元素或更多数据。
如果找到这样的元素,some
立即将返回true
答案 3 :(得分:2)
此时有一个老问题,但这是一个使用Array.find的ES6解决方案:
let machine2 = machines.find((machine) => machine.id === '2');
if (machine2) {
// ...
}
答案 4 :(得分:1)
你可以使用这个条件:
if (arr.filter(function(v){return this.MachineID == 2;}).length > 0)
答案 5 :(得分: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"}]