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

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 的项目数。我正在尝试这样做,而无需创建任何其他列表。


犯罪嫌疑人X
浏览 65回答 1
1回答

ABOUTYOU

您可以通过使用余数运算符和模式的长度作为索引来获取模式的值来过滤数组。const&nbsp; &nbsp; filterByPattern = (array, pattern) => array.filter((_, index) =>&nbsp; &nbsp; &nbsp; &nbsp; pattern[index % pattern.length]);console.log(filterByPattern([0, 7, 5, 4, 1, 3, 5], [0, 1, 0, 0]));通过保留数组的变异方法。const&nbsp; &nbsp; filterByPattern = (array, pattern) => {&nbsp; &nbsp; &nbsp; &nbsp; let index = array.length;&nbsp; &nbsp; &nbsp; &nbsp; while (index--)&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!pattern[index % pattern.length])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; array.splice(index, 1);&nbsp; &nbsp; &nbsp; &nbsp; return array;&nbsp; &nbsp; };console.log(filterByPattern([0, 7, 5, 4, 1, 3, 5], [0, 1, 0, 0]));展开片段
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript