2

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

这是验证:

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

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

4

2 回答 2

4

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

arr.length && arr.every(/*...*/)
于 2018-06-14T14:05:03.597 回答
1

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

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

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-06-14T14:22:39.267 回答