问题描述
我遇到了这段代码,它检查数组中元素的出现次数是否大于指定的次数,如果是,它将删除该数字:
function deleteNth(arr,x) {
var cache = {};
return arr.filter(function(n) {
cache[n] = (cache[n]||0) + 1;
return cache[n] <= x;
});
}
但我不明白这里的代码:arr.filter(function(n){cache[n] = (cache[n]||0) + 1;return cache[n] <= x;});
任何人都可以用简单的话解释一下这里发生了什么以及 cache[n]
部分是如何工作的。
为什么 cache[n]
会递增?
谢谢!
解决方法
arr.filter() 首先遍历数组中的每一项,在这种情况下,每一项都用“n”表示。
然后将此项添加到空对象中,其中 'n' 是键,然后,对于添加到对象中的每个新项目,值都会增加 1。
return 语句使用缓存来检查哪些 'n' 值小于或等于 x。如果返回 false,则不会将它们添加到创建的新数组中。因此,如果 'x' 为 3,它将删除数组中前三项之后的所有内容。
编辑
另一种可能更清晰的编写函数的方法是
function deleteNth(arr,x) {
return arr.filter((item,index) => {
if (index <= x) {
return item;
}
});
}