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]));
展开片段
添加回答
举报
0/150
提交
取消