无法读取JavaScript Array对象的未定义属性'includes'

时间:2018-02-09 09:58:42

标签: javascript arrays

以下是我的代码:

var nestedArr = [[1, 2, 3], [5, 2, 1, 4]];
var result;

  for (var a = 0; a < nestedArr.length; a++) { // iterate nestedArr
    for (var b = 0; b < nestedArr[a].length; b++) {
      if (nestedArr[a+1].includes(nestedArr[a][b])) {
        result.push(nestedArr[a][b]);
    }
  }
}

输出:Error: Cannot read property 'includes' of undefined。但至少我可以确定几件事: 1. JavaScript中的数组存在includes()方法 2.在控制台中运行单个语句nestedArr[a+1];,为我提供数组[5, 2, 1, 4]

所以,我真的不明白Error?请帮我解决这个问题。感谢。

3 个答案:

答案 0 :(得分:1)

程序将搜索不存在的索引。

var nestedArr = [[1, 2, 3], [5, 2, 1, 4]];
  ...
    ...
      if (nestedArr[a+1].includes(nestedArr[a][b])) {
      // As nestedArr.length will return 2, the program will eventually  search for nestedArr[2+1 (=3)] which doesn't exist.
    }
  }
}

加分:为什么不使用for var i in nestedArr而不是.length

Take a look at this answer.

答案 1 :(得分:1)

var nestedArr = [[1, 2, 3], [5, 2, 1, 4]];
var result = [];

  for (var a = 0; a < nestedArr.length; a++) { // iterate nestedArr
    for (var b = 0; b < nestedArr[a].length; b++) {
      if (nestedArr[a].includes(nestedArr[a][b])) {
        result.push(nestedArr[a][b]);
    }
  }
}
console.log(result)

删除加号完成了这项工作,基本上你试图访问一个没有阵列存在的数组

答案 2 :(得分:0)

正如@Nina Scholz评论的那样

  

最后一个索引加一个不存在

您无需通过包含检查!只需使用filtermap作为示例进行循环和分配!!!

var nestedArr = [[1, 2, 3], [5, 2, 1, 4]];
    var result = [];
    nestedArr.filter( (val) => {
      val.map( (v) => { result.push(v); } )
    })
    console.log(result);