下面的代码是如何一步一步工作的?

问题描述

我遇到了这段代码,它检查数组中元素的出现次数是否大于指定的次数,如果是,它将删除该数字:

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