我有一个这样的对象数组 - 比如说testArray。 我需要检查数组中的每个对象,如果任何saveNumbers数组为空,我的函数应该返回false。
我的功能如下:
public checkSaveNumbers(): boolean {
let result;
if (this.testArray) {
result = _.some(this.testArray, member => !member.saveNumbers.length);
}
console.log(result);
}
这里,结果显示我的上面的对象,我们可以看到数组中的第一个元素的saveNumbers数组为空。在这种情况下,我希望结果是假的。我想用Lodash实现这个目标,我不确定这里出了什么问题。
更新
正如评论中所建议的,我将代码更改为以下内容:
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。
答案 0 :(得分:4)
如果任何saveNumbers数组为空,我的函数应该返回false。
你试过了:
_.some(array, member => !member.saveNumbers.length)
但是,如果至少有一个成员有空的saveNumbers,这意味着" true 。"这与你想要的完全相反。
所以否定整个表达。
!_.some(array, member => !member.saveNumbers.length)
更新:
如果这也不适合你:
_.every(array, member => member.saveNumbers.length > 0)
然后你在其他地方有一个bug。
答案 1 :(得分:1)
您可以按照以下步骤重写您的功能:
function checkSaveNumber(testArray) {
return !_.some(_.map(testArray, 'saveNumbers'), ['length', 0]);
}
答案 2 :(得分:1)
另一种变体
!_.chain(testArray)
.map('saveNumbers')
.map(_.isEmpty)
.some()
.value()