【问题标题】:How does the following code work step by step? [closed]以下代码如何逐步工作? [关闭]
【发布时间】:2021-09-05 17:24:42
【问题描述】:

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

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] &lt;= x;}); 谁能用简单的话解释一下这里发生了什么以及cache[n] 部分是如何工作的。

为什么cache[n] 递增?

谢谢!

【问题讨论】:

标签: javascript node.js arrays iterator array-filter


【解决方案1】:

arr.filter() 从遍历数组中的每个项目开始,在这种情况下,每个项目都由“n”表示。

然后将此项目添加到空对象中,其中“n”是键,然后对于添加到对象的每个新项目,值都会增加一。

return 语句使用缓存来检查哪些 'n' 值小于或等于 x。如果它返回 false,则不会将它们添加到创建的新数组中。因此,如果 'x' 为 3,它将删除数组中前三个项目之后的所有内容。

编辑

另一种可能更清楚的编写函数的方式可能是

function deleteNth(arr,x) {
    return arr.filter((item, index) => {
        if (index <= x) {
          return item;
        }
    });
}

【讨论】:

  • 我们为什么要增加它@Mitchell Stone?
  • @Jithin 你的问题不是说“这段代码检查数组中元素的出现次数是否大于指定的次数”?如何在不增加的情况下检查出现次数?
  • 添加了一个编辑,看看我是否可以详细说明
猜你喜欢
  • 1970-01-01
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-19
  • 1970-01-01
  • 2010-11-13
  • 2016-10-22
相关资源
最近更新 更多