【问题标题】:Confusing about removing empty subarrays in JavaScript对删除 JavaScript 中的空子数组感到困惑
【发布时间】:2019-12-20 04:16:34
【问题描述】:

我有一个大小为 5 的数组,在每个元素中,我用相应的子数组填充,如下所示:

let equalSums = new Array(5);
    for (let i = 0; i < equalSums.length; i++) {
        equalSums[i] = new Array(5);
}
console.log(equalSums);
/*
[ [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ] ]
*/

在错误地找到等于给定数字(在本例中为 3)的连续子数组后,我将总和元素等于 3 的子数组推送到此 equalSum 数组,现在它看起来像这样:

[ [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ 1, 2 ],
  [ 2, 1 ],
  [ 3 ] ]

问题是我想删除所有空子数组,然后我执行以下操作:

let rs = equalSums.filter(e => e.every(x => x != ""));
console.log(rs);
/* 
[ [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ , , , ,  ],
  [ 1, 2 ],
  [ 2, 1 ],
  [ 3 ] ]
/*

还是一样,它不会删除空子数组。

但是,我改用some,它给了我想要的结果:

let rs = equalSums.filter(e => e.some(x => x != ""));
console.log(rs);
/*
[ [ 1, 2 ], [ 2, 1 ], [ 3 ] ]
*/

谁能解释一下为什么every 不起作用而some 起作用?

【问题讨论】:

    标签: javascript arrays


    【解决方案1】:

    你所拥有的稀疏[,,,,] 数组基本上没有 元素,只有未被任何东西占用的空间。

    所以[,,,,,].every(x =&gt; x != '') 问道,“这个数组的所有元素是否都不等于""?”答案是肯定的。它没有元素,所以它拥有的所有元素(无)都不等于""

    [,,,,].some(x =&gt; x != "") 问道:“这个数组是否有 any 元素不等于 ""?”答案是否定的。它没有元素,所以它没有任何不等于""

    您还没有真正解释为什么要使用所有这些稀疏数组,我怀疑您可能会以错误的方式去做任何您想做的事情,但至少这解释了您使用 @ 看到的内容987654328@和some

    【讨论】:

    • 对我来说看起来不错,我想这个答案解释了为什么有些人在相同的情况下有不同的返回值,因为他们对问题的措辞不同。
    【解决方案2】:

    请注意 [,,,,] 被认为是一个空数组,并且在使用 everysome 时的行为方式与 [] 相同,即使它说它的长度为 4。 more info on that

    everysome 在空数组上调用它们会返回不同的值。

    [].every(x => x)
    true
    [].some(x => x)
    false
    

    您的代码似乎依赖这种行为来过滤掉空数组,您的检查 x != "" 不是过滤的内容。

    【讨论】:

    • [[], [], [], [1, 2], [2, 1], [3]] 不等同于 OP。
    • 这个方法我已经用过了,但是没用。每个空字符串被评估为 4 的长度。
    • @NamV.Do 也许你应该解释一下你在这里实际上想要做什么?为什么要用稀疏数组填充外部数组然后删除它们?
    • 我明白了,为了清楚起见,[ , , , , ] 是指 ["", "", "", ""] 还是 [undefined, undefined, undefined, undefined] 吗?
    • @YounesElAlami 这两个都不是。这意味着[,,,,]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多