函数中的对象是未定义的js

时间:2017-11-13 14:36:40

标签: javascript function object undefined

我试图找出我的对象数组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);

1 个答案:

答案 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函数