我正在做一个练习,要求我删除具有与另一个变量匹配的元素的数组。
例如
filteredArray([[10, 8, 3], [14, 6, 23], [3, 18, 6]], 18)
应返回[[10, 8, 3], [14, 6, 23]]
考虑到我们正在使用嵌套数组这一事实,尽管我打算使用double for循环到每个元素中。
赞:
function filteredArray(arr, elem) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j] != elem) {
newArr.push(arr[i]);
}
}
// change code above this line
return newArr;
}
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
预期结果是有一个空数组,但是它给了我:
[3, 2, 3]
正确的解决方案如下:
function filteredArray(arr, elem) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
if (arr[i].indexOf(elem) == -1) { //Checks every parameter for the element and if is NOT there continues the code
newArr.push(arr[i]); //Inserts the element of the array in the new filtered array
};
};
return newArr;
};
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
这有道理,但我不明白为什么我的错。
答案 0 :(得分:2)
您的问题在于:
if (arr[i][j] != elem) {
newArr.push(arr[i]);
}
每次内部元素(newArr
)不等于过滤器元素(newArr[i][j]
)时,您就将数组推入elem
。相反,如果newArr
中的所有项目都不等于arr[i]
,则想将其推入elem
。您可以通过几种方法执行此操作,一种方法是使用变量found
作为标志,指示是否在任何内部列表中都找到了elem
,然后将其添加找不到:
function filteredArray(arr, elem) {
let newArr = [];
for (let i = 0; i < arr.length; i++) {
let found = false;
for (let j = 0; j < arr[i].length; j++) {
if (arr[i][j] == elem) {
found = true;
}
}
if(!found) {
newArr.push(arr[i]);
}
}
// move return out of for loop
return newArr; // change code above this line
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26],
[19, 3, 9]], 3));
答案 1 :(得分:1)
您之所以得到[3, 2, 3]
,是因为您是从第一个for
循环的内部返回的。因此,它只检查第一个内部数组。即使将其移到外部,也会返回整个2d数组,因为每个内部数组都有一个会失败arr[i][j] == elem
条件的元素。
function filteredArray(arr, elem) {
return arr.filter(a => !a.includes(elem))
}
console.log(filteredArray([[3, 2, 3], [1, 6, 3], [3, 13, 26], [19, 3, 9]], 3));
答案 2 :(得分:0)
您检查子数组的每个元素,如果不匹配elem
,则将子数组推入结果。这意味着对于第一个示例中的[3, 18, 6]
,它将针对3
(elem
)检查18
,然后推送该数组,针对{{1 }},它不会完全满足条件,然后它将与确实匹配的18
对照elem
进行检查,再次将数组推入 。相反,您应该根据值检查整个数组,然后按入。
6
答案 3 :(得分:0)
您的代码中有一些错误的地方:
我如下编辑您的代码:
{{1}}