我试图拼接奇数/偶数,看起来像这样,我试图找到奇数,但是在结果数组上,偶数仍然存在,
function find(index){
for(var i = 0 ; i < index.length;i++) {
for(var j = 0 ; j < index[i].length ; j++) {
if(index[i][j] % 2 === 1) { // trying to find odd numbers
index[i].splice(j, 1)
}
}
}
return index
}
var data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
var another = [
[2, 2, 7],
[1, 3, 5, 6],
[1, 3, 5, 7, 9, 11]
]
console.log(find(data))
console.log(find(another))
我的代码有什么错误吗?还是我错过了什么? :)
答案 0 :(得分:3)
问题在于,当您遍历数组时,您正在对其进行突变。
即。在第二个数组的第二行([1,3,5,6]
)上,请考虑发生了什么:
[3,5,9]
我已经在您的代码中添加了一个控制台日志来演示这一点。
function find(index){
for(var i = 0 ; i < index.length;i++) {
for(var j = 0 ; j < index[i].length ; j++) {
if (i ===1) console.log(`i = ${i}, j=${j}, index[i] = ${index[i]}, index[i].length=${index[i].length}`);
if(index[i][j] % 2 === 1) { // trying to find odd numbers
index[i].splice(j, 1)
}
}
}
return index
}
var another = [
[2, 2, 7],
[1, 3, 5, 6],
[1, 3, 5, 7, 9, 11]
]
console.log(find(another))
因此,通常,通常不要循环遍历数组并对其进行突变。
相反,我建议尽可能使用Array.prototype methods而不是循环。
某些性能建议-您可以在此处使用过滤器。
function find(array){
//Assuming array is a 2d array.
return array.map(row => row.filter(v => v%2 ===0));
}
var data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
var another = [
[2, 2, 7],
[1, 3, 5, 6],
[1, 3, 5, 7, 9, 11]
]
console.log(find(data))
console.log(find(another))
请注意,这确实会返回一些空数组,您可能想要保留这些空数组,或者可能想要再次进行过滤以删除空数组。
请注意,如果您不熟悉它-我在回答中使用ES6 fat arrow语法。