【问题标题】:lodash, check if collection contains object with property of valuelodash,检查集合是否包含具有 value 属性的对象
【发布时间】:2017-10-23 02:49:39
【问题描述】:

这将通过具有替换代码中的代码属性的项目集合过滤替换代码。代码按预期工作,但可读性不强。

return this.replacement_codes.filter((code) => {
    let length = this.items.length;
    for (let index = 0; index < length; index++) {
        if (this.items[index].code === code) {
            return false;
        }
    }

    return true;
});

我正在想办法让 lodash 为我做这件事。

以下代码有效。现在我不知道如何使用 lodash 获取布尔结果以检查集合是否包含具有给定值的属性。

return _.filter(this.replacement_codes, (code) => {
    let length = this.replacements.length;
    for (let index = 0; index < length; index++) {
        if (this.replacements[index].code === code) {
            return false;
        }
    }

    return true;
});

进一步简化:

let items = [
    {
        code: 'a',
        value: 'something1'
    },
    {
        code: 'b',
        value: 'something2'
    },
    {
        code: 'c',
        value: 'something3'
    },
    {
        code: 'd',
        value: 'something4'
    },
];

let array_to_filter = ['a', 'd', 'z', 'x'];

我希望过滤后的数组是 ['z', 'x'];

【问题讨论】:

    标签: lodash


    【解决方案1】:

    我相信你可以使用 _.differenceWith 解决这个问题

    let items = [
        {
            code: 'a',
            value: 'something1'
        },
        {
            code: 'b',
            value: 'something2'
        },
        {
            code: 'c',
            value: 'something3'
        },
        {
            code: 'd',
            value: 'something4'
        },
      ];
    
      let array_to_filter = ['a', 'd', 'z', 'x'];
    
      let r = _.differenceWith(array_to_filter, items, (f, i) => f == i.code );
    
      console.log(r) 
    

    【讨论】:

      猜你喜欢
      • 2012-02-02
      • 2017-12-11
      • 2018-03-08
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2017-05-16
      • 2014-11-30
      • 1970-01-01
      相关资源
      最近更新 更多