【发布时间】:2017-04-16 14:18:58
【问题描述】:
我有一个这样的对象数组 - 比如说 testArray。 我需要检查数组中的每个对象,如果任何 saveNumbers 数组为空,我的函数应该返回 false。
我的功能如下:
public checkSaveNumbers(): boolean {
let result;
if (this.testArray) {
result = _.some(this.testArray, member => !member.saveNumbers.length);
}
console.log(result);
}
在这里,我上面的对象的结果显示为 true,我们可以看到数组中的第一个元素的 saveNumbers 数组为空。在这种情况下,我希望结果是错误的。我想使用 Lodash 来实现这一点,但我不确定这里出了什么问题。
更新:
按照 cmets 的建议,我将代码更改为:
public checkSaveNumbers(): boolean {
let result = true;
if (this.testArray) {
result = _.every(this.testArray, member => member.saveNumbers.length > 0); //as soon as the condition is false, result should become false otherwise result will remain true.
console.log(result);
}
}
但是,使用此代码,即使我的 saveNumbers 数组对于 testArray 中的每个成员都不为空,我也会得到结果为 false。
【问题讨论】:
-
uhm.... .some 如果其中一个为真,则返回真。在你的情况下,其中一个是真的,所以结果将是真的......简单地否定它,或者使用
.every并停止否定长度 -
如果我否定它,即使 saveNumbers 不为空,它也总是返回 false。
-
.some如果数组中的任何项目符合条件,则返回 true。您的条件是“数组为空”。所以result将是真的,如果任何项目有一个空数组。你想要相反的,所以,否定result,或者使用.every -
我不明白为什么有人会否决这样的问题! @KevinB 我将代码更改为 result = _.every(this.selectedMembers, member => member.saveNumbers.length);现在,即使 saveNumbers 包含元素,结果也会显示为 false。
-
不清楚。您的代码完全按照它应该做的,但是您期望得到不同的结果……所以您应该将其更改为具有预期的结果。我不明白问题出在哪里。
标签: javascript angularjs arrays lodash