Javascript 函数中的对象未定义
我试图找出我的对象数组Javascript 函数中的对象未定义,javascript,function,object,undefined,Javascript,Function,Object,Undefined,我试图找出我的对象数组CoilArray的对象是否包含某个值 为此,我使用函数hasValue 我希望能够对两个值进行过滤并返回过滤后的数组,正如您在函数filterray 我在函数hasValue中遇到问题 我收到的错误消息显示: obj未定义 obj显然应该是我赋予函数的对象 为什么它没有定义? 我如何定义它 hasValue本身似乎在工作 var CoilArray = [{ id: "First Coil", systemId: ["System A", "System C"],
CoilArray
的对象是否包含某个值
为此,我使用函数hasValue
我希望能够对两个值进行过滤并返回过滤后的数组,正如您在函数filterray
我在函数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);
var CoilArray=[{
id:“第一线圈”,
系统ID:[“系统A”、“系统C”],
字段Str:[“Str A”、“Str B”],
}, {
id:“第二线圈”,
systemId:“系统B”,
字段Str:[“Str B”,“Str C”],
}, {
id:“第三线圈”,
systemId:“系统C”,
fieldStr:“strc”,
}, ]
函数值(对象、键、值){
if(obj[key].indexOf(value)>-1){
返回true;
}
}
函数过滤器阵列(carray){
var arr=新数组();
对于(var i=0;i您可以将所有这些都缩减到这一步。检查systemId是否是我引用的数组
这使用了函数显然,您可以在自己的代码中执行自己喜欢的操作,但是当与其他人共享代码(例如,请求帮助)时,请花时间以可读、一致的方式缩进并格式化代码。(即使不与其他人共享代码,这也是一个好主意。)(我已经获取了代码,请从头到尾运行它[没有联系],并在这个场合为您删除了无关的空行。[啊,但现在Fran撤销了,但做了类似的事情。]
(var i=0;我正在同时格式化代码和问题,我一定是在你之后点击了save。对不起@T.J。Crowder@Fran:不用担心,我们也在做同样的事情。谢谢你的回答。我试图通过filter()
解决问题,但对于CoilArray
(例如fieldStr:[“Str B”,“Str C”],
)。它只能过滤第三个对象,因为我要查找的两个键只有一个值。我相信我上面的代码可以工作,但我不知道为什么hasValue()中的obj
)
状态为未定义
。你能帮我吗?@MaxGroh我要调整我的答案
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;
});