首页 > 解决方案 > Javascript lodash 根据值过滤数组中的对象

问题描述

我有以下对象数组:

var array = [
  {
    name: isSale,
    value: true
  },
  {
    name: isSale,
    value: false
  },
  {
    name: isNew,
    value: true
  }
]

我需要过滤数组,以便最后只有 2 个对象:

var array = [
  {
    name: isSale,
    value: true
  },
  {
    name: isNew,
    value: true
  }
]

这意味着如果我有相同名称(isSale)的真值和假值,我需要为对象保留真值。

但是如果我的数组看起来像这样:

var array = [
  {
    name: isSale,
    value: false
  },
  {
    name: isNew,
    value: true
  }
]

这意味着没有重复的 isSale 对象,它应该保持这样,并且不应从数组中删除具有 false 值的对象。

我更喜欢使用 ES5 的解决方案(你可以在 ES6/7 中编写它并使用 babel 将其转换为 ES5),你也可以使用 lodash。

感谢您的建议和欢呼!

标签: javascriptarrayslodash

解决方案


您可以name在结果集中搜索相同的值,如果前一个值为false.

const
    filter = array => array.reduce((r, o) => {
        var index = r.findIndex(({ name }) => name === o.name)
        if (index === -1) r.push(o);
        else if (!r[index].value) r[index] = o;
        return r;
    }, []),
    array1 = [{ name: 'isSale', value: true }, { name: 'isSale', value: false }, { name: 'isNew', value: true }],
    array2 = [{ name: 'isSale', value: false }, { name: 'isNew', value: true }];

console.log(filter(array1));
console.log(filter(array2));
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读