我有一个大小为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
起作用吗?
答案 0 :(得分:0)
您在那里拥有的稀疏[,,,,]
数组实际上没有 no 元素,只有没有任何内容的空格。
因此[,,,,,].every(x => x != '')
问,“此数组的所有元素是否不等于""
?”答案是肯定的。它没有元素,因此它拥有的所有元素(无)都不等于""
。
[,,,,].some(x => x != "")
问道:“此数组是否包含不等于""
的任何个元素?”答案是否定的。它没有元素,因此没有不等于""
的元素。
您还没有真正解释为什么要使用所有这些稀疏数组,我怀疑您可能会以错误的方式进行任何尝试,但是至少这可以解释{ {1}}和every
。
答案 1 :(得分:0)
请注意,[,,,]被认为是空数组,并且在使用every
和some
时,其行为与[]相同,即使它的长度为4。
more info on that
every
和some
会返回不同的值。
[].every(x => x)
true
[].some(x => x)
false
您的代码似乎依赖此行为来过滤出空数组,您的检查x != ""
并不是过滤的工作。