javascript - Javascript数组排序具有键值条件的唯一对象
问题描述
我有一个数组
"datawithisNew": [
{
"exam_name": "MPSC",
"isNew": false
},
{
"exam_name": "MPSC",
"isNew": true
},
{
"exam_name": "UPSC",
"isNew": false
},
{
"exam_name": "RAILWAY",
"isNew": false
},
{
"exam_name": "RAILWAY",
"isNew": false
}]
我试图获得一个具有唯一性的结果,这样如果至少有 1 个键为真,则结果对象exam_name
数组也具有唯一exam_name
值,如果不是,则结果对象应该具有 的属性。预期结果——exam_name
isNew
isNew
true
false
"datawithisNew": [
{
"exam_name": "MPSC",
"isNew": true
},
{
"exam_name": "UPSC",
"isNew": false
},
{
"exam_name": "RAILWAY",
"isNew": false
}]
我正在使用的代码是-
var helper1 = {};
var result2 = data12.reduce(function(r, o) {
var key = o.exam_name ;
if(!helper1[key]) {
helper1[key] = Object.assign({}, o); // create a copy of o
r.push(helper1[key]);
} else {
helper1[key].exam_name_rating += o.exam_name_rating;
}
return r;
}, []);
但这只是返回唯一的对象,如果它至少发生一次,exam_name
我也需要isNew
密钥,因为它应该具有真实性,否则true
exam_name
isNew:true
isNew:false
解决方案
使用 JSArray.filter
过滤掉重复项
const datawithisNew = [{
"exam_name": "MPSC",
"isNew": false
},
{
"exam_name": "MPSC",
"isNew": true
},
{
"exam_name": "UPSC",
"isNew": false
},
{
"exam_name": "RAILWAY",
"isNew": false
},
{
"exam_name": "RAILWAY",
"isNew": false
}
];
const uniqueItems = datawithisNew.filter((exam, index, self) => {
return self.findIndex(e => exam.exam_name === e.exam_name) === index
}).map(exam => {
if (!exam.isNew && datawithisNew.find(e => e.exam_name === exam.exam_name && e.isNew)) {
exam.isNew = true;
}
return exam;
});
console.log(uniqueItems);
推荐阅读
- r - 正则表达式无效,原因是 R 函数中的“{} 内容无效”
- ruby-on-rails - Devise on Rails 6 中的子用户
- python - 电脑关机时自动退出 Gmail 的 Python 脚本
- c# - 如何从 Swagger URL 获取 JSON 模式
- vb.net - 在 vb.net 中绘制覆盖到图片的线条
- .net - 当前的 .NET SDK 不支持面向 .NET Core 2.2。面向 .NET Core 2.1 或更低版本
- angular - 如何使用 fxLayout for Angular Material 仅在移动设备而非桌面设备中显示某些内容
- laravel - 在 Laravel5.7 中验证数组上的重复值(多列唯一)
- flutter - 如何在 ListView.builder 上使用 Wrap?
- ruby-on-rails - Rails 5延迟作业,如何检查作业状态