我试图找出我的对象数组CoilArray
的对象是否包含某个值。
为此我使用函数hasValue
我希望能够过滤两个值并返回一个过滤后的数组,正如您在函数filterArray
我在函数hasValue
中遇到了问题。
我收到的错误消息说:
obj未定义
obj
显然应该是我给该函数的对象。
为什么不定义?
我该如何定义它?
hasValue
本身似乎正在运作
var CoilArray = [{
id: "First Coil",
systemId: ["System A", "System C"],
fieldStr: ["Str A", "Str B"],
}, {
id: "Second Coil",
systemId: "System B",
fieldStr: ["Str B", "Str C"],
}, {
id: "Third Coil",
systemId: "System C",
fieldStr: "Str C",
}, ]
function hasValue(obj, key, value) {
if (obj[key].indexOf(value) > -1) {
return true;
}
}
function filterArray(carray) {
var arr = new Array();
for (var i = 0; i <= carray.length; i++) {
if (hasValue(carray[i], "systemId", "System A") &&
hasValue(carray[i], "fieldStr", "Str B")) {
arr.push(carray[i].id);
console.log(arr[i].id);
}
}
return arr;
}
hasValue(CoilArray[0], "fieldStr", "Str A");
filterArray(CoilArray);
答案 0 :(得分:0)
嗯,你可以减少所有这一切。并检查systemId是否是我引用此answer
的数组var filteredArray = CoilArray.filter(function (obj) {
let isSystemA = false;
let isStrB = false;
// If Array then check if Array has value
if (obj.systemId.constructor == Array) {
isSystemA = obj.systemId.includes("System A") && isStrB;
} else {
isSystemA = obj.systemId === "System A";
}
if (obj.fieldStr.constructor == Array) {
isStrB = obj.fieldStr.includes("Str B") && isStrB;
} else {
isStrB = obj.fieldStr === "Str B";
}
return isSystemA && isStrB;
});
这使用filter函数