Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 函数中的对象未定义_Javascript_Function_Object_Undefined - Fatal编程技术网

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;
});