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

具有二进制模式的列表过滤器

具有二进制模式的列表过滤器

犯罪嫌疑人X 2022-06-05 10:25:41
let listFilter = [0,7,5,4,1,3,5];let pattern = [0,1,0,0];function FilterByPattern(listToFilter, pattern){    let variable = 0;    while(variable < listToFilter.length){        for(i of pattern){            if(variable < listToFilter.length){                if(i == 0){                    listToFilter.splice(variable,1);                }else{                    variable += 1;                }            }else{                break;            }        }    }    return listToFilter;}console.log(FilterByPattern(listFilter, pattern))你好,我想知道是否有一种更优雅的方法来过滤具有另一个列表模式(1 和 0)的列表,如上所述。代码的问题在于它进行的迭代次数超过了 listToFilter 的项目数。我正在尝试这样做,而无需创建任何其他列表。
查看完整描述

1 回答

?
ABOUTYOU

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

您可以通过使用余数运算符和模式的长度作为索引来获取模式的值来过滤数组。


const

    filterByPattern = (array, pattern) => array.filter((_, index) =>

        pattern[index % pattern.length]);


console.log(filterByPattern([0, 7, 5, 4, 1, 3, 5], [0, 1, 0, 0]));


通过保留数组的变异方法。


const

    filterByPattern = (array, pattern) => {

        let index = array.length;


        while (index--) 

            if (!pattern[index % pattern.length])

                array.splice(index, 1);


        return array;

    };


console.log(filterByPattern([0, 7, 5, 4, 1, 3, 5], [0, 1, 0, 0]));

展开片段


查看完整回答
反对 回复 2022-06-05
  • 1 回答
  • 0 关注
  • 64 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信