以下是我的代码:
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
?请帮我解决这个问题。感谢。
答案 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
答案 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评论的那样
最后一个索引加一个不存在
您无需通过包含检查!只需使用filter
和map
作为示例进行循环和分配!!!
var nestedArr = [[1, 2, 3], [5, 2, 1, 4]];
var result = [];
nestedArr.filter( (val) => {
val.map( (v) => { result.push(v); } )
})
console.log(result);