如何解决下面的代码是如何一步一步工作的?
我遇到了这段代码,它检查数组中元素的出现次数是否大于指定的次数,如果是,它将删除该数字:
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;
}
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。