Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果元素的出现次数超过n次,则删除该元素的出现次数_Javascript - Fatal编程技术网

Javascript 如果元素的出现次数超过n次,则删除该元素的出现次数

Javascript 如果元素的出现次数超过n次,则删除该元素的出现次数,javascript,Javascript,所以我有一个问题,我一直坚持,但有一个答案,但不确定它到底为什么工作。。。有人能解释一下为什么这样做吗 function deleteNth(arr,n){ var cache = {}; return arr.filter(num => { cache[num] = (cache[num]||0) + 1; // this is the line i am comfused about!! return cache[num] <= n;

所以我有一个问题,我一直坚持,但有一个答案,但不确定它到底为什么工作。。。有人能解释一下为什么这样做吗

function deleteNth(arr,n){

   var cache = {};
    return arr.filter(num => {
      cache[num] = (cache[num]||0) + 1; // this is the line i am comfused about!!
      return cache[num] <= n;
    });
  
  }

deleteNth([1,1,3,3,7,2,2,2,2], 3);
函数deleteNth(arr,n){
var cache={};
返回arr.filter(num=>{
cache[num]=(cache[num]| | 0)+1;//这是我一直在思考的问题!!

返回cache[num]以便通过filter函数为数组中的每个元素运行

您感到困惑的一行是设置缓存[num]

在第一次迭代中,num将是1,cache将等于{},因此cache[num]将是未定义的

它将其设置为(cache[num]| | 0),这实际上意味着如果cache[num]或0。由于cache[num]在第一个实例中未定义,它将为0。然后它将添加1

因此,每次命中该数字时,它都会添加一个,然后如果实例数低于或等于接受的数字,它就会返回,在本例中为3


当它超过该阈值时,它将等于false,现在它将不作为筛选器的一部分包含。

因此,通过筛选器函数,它将为数组中的每个元素运行

您感到困惑的一行是设置缓存[num]

在第一次迭代中,num将是1,cache将等于{},因此cache[num]将是未定义的

它将其设置为(cache[num]| | 0),这实际上意味着如果cache[num]或0。由于cache[num]在第一个实例中未定义,它将为0。然后它将添加1

因此,每次命中该数字时,它都会添加一个,然后如果实例数低于或等于接受的数字,它就会返回,在本例中为3


当它超过该阈值时,它将等于false,现在它将不作为筛选器的一部分包含。

cache[num]| | 0
表示如果
cache[num]
没有键
num
,则使用值0。 这是因为值
cache[num]
在第一次出现时可以为null

var cache={}
console.log(缓存[1]);//未定义

log(cache[1]| | 0);//0
cache[num]| | 0
表示如果
cache[num]
没有键,则使用值0。 这是因为值
cache[num]
在第一次出现时可以为null

var cache={}
console.log(缓存[1]);//未定义

console.log(cache[1]| | 0);//0
该函数正在使用内置的筛选函数来限制数组的大小。请参阅此处的MDN文档:
(cache[num]| | 0)+1
-此行检查
缓存对象中的键
[num]
。如果它存在,则将1添加到该计数中。如果
计数[num]
是一个错误的值,
0+1
将被加在一起。
缓存[num]
对于第一次添加到
缓存中的每个新数字都将是未定义的。该函数使用内置的筛选函数来限制数组的大小。请参阅此处的MDN文档:
(缓存[num]| 0)+1
-此行检查
cache
对象中的键
[num]
。如果存在,则将1添加到该计数中。如果
count[num]
是错误值,则将
0+1
一起添加。
cache[num]
对于第一次添加到
缓存中的每个新数字都将是未定义的。这很好地解释了它,谢谢,尼克!这很好地解释了,谢谢,尼克!
缓存[num]|0
意味着如果
缓存[num]
没有键
num
则使用值0”-更准确的说法是,如果
cache[num]
是一个假值,那么
cache[num]||0
将计算为零。非常有帮助,谢谢!“
cache[num]|0
意味着如果
cache[num]
没有键
num
则使用值0”-更准确的说法是如果
cache[num]
是一个伪值,那么
缓存[num]| | 0
将计算为零。非常感谢您的帮助!