Lodash - 使用_.some检查对象数组中的空数组

时间:2016-12-01 19:48:34

标签: javascript angularjs arrays lodash

我有一个这样的对象数组 - 比如说testArray。 enter image description here 我需要检查数组中的每个对象,如果任何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。

3 个答案:

答案 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]);  
}

http://jsbin.com/domitexazo/edit?js,console

答案 2 :(得分:1)

另一种变体

!_.chain(testArray)
    .map('saveNumbers')
    .map(_.isEmpty)
    .some()
    .value()