【问题标题】:Is there a method like .every() for arrays with empty values?对于具有空值的数组,是否有类似 .every() 的方法?
【发布时间】:2018-11-24 08:09:25
【问题描述】:

直到知道之前,我的迭代一直运行良好且花花公子。我遇到了一个空数组,而 .every() 方法不适用于这种值。

这是验证:

if(oJSonElementByIndex[sColumnName].every(x => typeof x == 'number'))

¿还有其他选择吗? 提前致谢。

【问题讨论】:

  • 你的意思是它不起作用?你到底想达到什么目标?
  • 我认为就他想要实现的什么而言,一行代码是不言自明的......
  • @Robert 不是真的......整个问题需要澄清
  • 空数组的每个值都会验证您想要的任何谓词。如果这不符合您的口味,您可能需要预先测试数组是否为空,即if(array.length > 0 && array.every(predicate))
  • “我遇到了一个空数组,而 .every() 方法不适用于这种值”。如果你有一个像这样的对象:“key”:[],那么 every() 方法就不够用了。

标签: javascript foreach iteration


【解决方案1】:

如果数组中没有元素,则数组中的每个元素都满足条件。因此它返回真。要达到相反的效果:

arr.length && arr.every(/*...*/)

【讨论】:

  • 是否有理由使用arr.length,而不是更明确的arr.length > 0或更简洁的arr
  • @aaron arr 不起作用。而且我不认为> 0 使它更具可读性。
  • @Aaron 纠正我如果我错了,但我认为使用空数组不起作用,因为使用布尔逻辑运算符时的类型强制:[] && ... 将被强制转换为true && ...
  • @worc 我很确定空数组被强制为布尔值,但事实证明我错了。我一定一直在考虑 python。
【解决方案2】:

所以关于“每个”谓词在空数组上实现的评论,以及关于使用 array.length 而不仅仅是数组的评论让我把这个 sn-p 放在一起来说明。

这里要注意的是空数组的真实性,空数组长度的虚假性 - 零,以及如果你有 no 谓词然后 的有点不直观的逻辑想法他们都没有通过条件:

const empty = []
const typeofNumber = (x) => ( typeof x === 'number' )

console.log(`an empty array will return ${empty.every(typeofNumber)} on an every, since "every" predicate fulfilled the condition`)

if(empty.length && empty.every(typeofNumber)) {
  console.log('empty array length and every are truthy')
} else {
  console.log('empty array length and every are falsey')
}

if(empty && empty.every(typeofNumber)) {
  console.log('empty array and every are truthy')
} else {
  console.log('empty array and every are falsey')
}

【讨论】:

    猜你喜欢
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 2012-01-28
    相关资源
    最近更新 更多