javascript - 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。
感谢您的建议和欢呼!
解决方案
您可以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; }
推荐阅读
- sql - 按月选择记录数
- excel - 为什么字典类的 Typename 函数这么慢?
- django - AWS EB CLI Django
- javascript - 有人可以帮我解释为什么这个功能没有做我想要的吗
- apache-spark - 如何避免 Hive 暂存区写入云
- graphql - 放大数据存储错误:预期标量并获得用户
- git - 致命:无法更新 ref 'head':无法附加到 '.git/logs/head':无效参数
- resharper - ReSharper 扩展管理器看不到本地包
- c# - ASP.NET Core Web App 将项目更改/添加到页面
- swift - 如何在 SwiftUI 中制作移动/实时虚线?