我正在尝试从另一个数组中找到的数组中删除特定元素。我的数组返回不变。我的假设是我在if
语句中的条件不正确,但是,我无法在网上找到明确的解释。任何帮助将不胜感激。
尝试从...args
删除array
<script>
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
for (i = 0; i < removalItems.length; i++) {
if (array === removalItems[i]) {
array.splice(i, 1);
} else {
i++
}
}
// console.log(array);
return array;
}
removeFromArray([1, 2, 3, 4], 3, 2)
</script>
```
答案 0 :(得分:2)
您的代码中的问题是您正在通过removeFromArray
进行一次循环,但没有遍历数组以检查数组中的每个元素是否都必须使用嵌套循环
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
for (i = 0; i < array.length; i++) {
for (j = 0; j < removalItems.length; j++) {
if (array[i] === removalItems[j]) {
array.splice(i, 1);
i--
}
else continue
}
}
return array
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2))
另一种方法是使用过滤器
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
return array.filter(x=>!removalItems.some(y=>x==y))
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2));
答案 1 :(得分:1)
使用std::map
可以简化此操作,并且不会变异原始数组
filter()
答案 2 :(得分:1)
您几乎没有错误,如果它们不在同一位置,也将无法工作,并且在您删除带有切片的项目时,您需要递减i,否则您将跳过项目
ABC:::nw_fct
但是过滤器很容易实现
const removeFromArray = (array, ...removalItems) => {
for (i = 0; i < array.length; i++) {
if (removalItems.includes(array[i])) {
array.splice(i, 1);
i--;
}
}
return array;
}
答案 3 :(得分:-1)
在您的for循环中,您必须
for (let j=0; j<array.length; j++)
if (array[j]===removalItems[i])
...the rest is the same
答案 4 :(得分:-1)
使用相同的代码模式,您会遇到3个错误:
let removalItems = Array.from(args);
for (i = 0; i < array.length; i++) {
for (j = 0; j < removalItems.length; j++) {
if (array[i] === removalItems[j]) {
array.splice(i, 1);
i--
}
}
}
此外,您还需要另一个for循环来迭代所有选项。 这段代码最终效率低下,但适用于大多数应用程序。我删除了else语句,因为每次循环时您已经在惩罚我。
答案 5 :(得分:-1)
您正在将数组视为具有单个对象。
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
for (i = 0; i < array.length; i++) {
if (removalItems.includes(array[i])) {
array.splice(i, 1);
i--;
}
}
// console.log(array);
return array;
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2));
这是另一个解决方案,在迭代数组时不拼接数组。
removeFromArray = function(array, ...args) {
let removalItems = Array.from(args);
let result = [];
for (i = 0; i < array.length; i++) {
if (!removalItems.includes(array[i])) {
result.push(array[i]);
}
}
// console.log(array);
return result;
}
console.log(removeFromArray([1, 2, 3, 4], 3, 2));