【问题标题】:javascript filter missing arrayjavascript过滤器缺少数组
【发布时间】:2017-08-12 04:58:20
【问题描述】:

我尝试让拒绝函数在数组中查找缺失值:

var store = [0,1,2,3,4,5,6,7,8,15,16,18,20,21];
var fullArray= [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21];
function reject(array, iteratorFunction) {
    return array.filter(function(element) {
        return !iteratorFunction(element)});
}
var missingValues = reject(fullArray, function(number){
  return store.find(function(item){return number === item});
}); 
console.log(missingValues);

但我的结果显示:

[0,9,10,11,12,13,14,17,19] 

在第一个值中显示 0。 为什么会发生这种情况以及如何解决?

【问题讨论】:

    标签: javascript arrays filter find


    【解决方案1】:

    store.find 返回它找到的元素。如果那是0,那么您的iteratorFunction 将返回0,而!0true,因为0 是虚假的。

    不过,使用Array#includes 的正确存在检查更加简洁:

    var missingValues = reject(fullArray, function (number) {
      return store.includes(number);
    });
    

    【讨论】:

      【解决方案2】:

      你也可以用更简洁的方式进行如下操作;

      var store     = [0,1,2,3,4,5,6,7,8,15,16,18,20,21],
          fullArray = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],
          result    = fullArray.filter(n => !store.includes(n));
      console.log(result);

      但是,这将在 O(n.m) 中运行,因此更有效的方法是;

      var store     = [0,1,2,3,4,5,6,7,8,15,16,18,20,21],
          fullArray = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21],
          result    = fullArray.reduce((t,m) => (!t[m] && t.r.push(m),t), store.reduce((h,n) => (h[n] = true,h),{r:[]})).r;
      console.log(result);

      在 O(n + m) 中运行

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2017-02-22
        • 1970-01-01
        相关资源
        最近更新 更多