为了账号安全,请及时绑定邮箱和手机立即绑定

循环 - 从数组中删除元素

循环 - 从数组中删除元素

喵喔喔 2022-11-11 13:16:29
我正在尝试从另一个数组中找到的数组中删除特定元素。我的数组返回不变。我的假设是我在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>    ```
查看完整描述

4 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您的代码中的问题是您正在进行一个循环,removeFromArray但您没有循环通过您的数组来检查数组中的每个元素是否与 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));


查看完整回答
反对 回复 2022-11-11
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

使用filter()会简化这一点并且不会改变原始数组


const removeFromArray = (array, ...args) => {

  let removalItems = new Set(args);

  return array.filter(e => !removalItems.has(e));

}

console.log(removeFromArray([1, 2, 3, 4], 3, 2))


查看完整回答
反对 回复 2022-11-11
?
慕容708150

TA贡献1831条经验 获得超4个赞

您几乎没有错误,如果它们不在同一位置,并且当您删除带有 slice 的项目时,您需要递减 i 否则您将跳过项目


const removeFromArray = (array, ...removalItems) => {

    for (i = 0; i < array.length; i++) {

        if (removalItems.includes(array[i])) {

            array.splice(i, 1);

            i--;

        }

    }

    return array;

}

但是过滤器更干净


const removeFromArray = (array, ...removalItems) => array.filter(x => !removalItems.includes(x))



查看完整回答
反对 回复 2022-11-11
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

您将数组视为具有单个对象。


遍历数组并使用包含方法检查该元素是否存在于removingItems 数组中。如果是 splice ,则增加。

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));


查看完整回答
反对 回复 2022-11-11
  • 4 回答
  • 0 关注
  • 164 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号