我想知道如何获得具有不同对象的对象数组。 我正在管理一个我们不断修改的数据库,我们希望对对象进行持续修改以显示它们。 我正在使用NeDB,我们不能使用不同的值,因此我有一个按日期排序的对象数组,但我不知道如何获取具有唯一名称的对象数组。
不同的对象意味着:
想象一下,我有3个像
这样的对象{name: "Toto", modif: "added", createdAt : "05/08/2017"}
{name: "Toto", modif: "updated", createdAt: "05/09/2017"}
{name: "Toto", modif: "deleted", createdAt: "05/10/2017"}
我想在这里保留第一个Toto。
我们不关心那个日期,因为对象数组已按日期排序。
答案 0 :(得分:2)
您可以使用哈希表为相同的命名对象保留标志并过滤给定的数组。
var objects = [{ name: "Toto", modif: "added", createdAt: "05/08/2017" }, { name: "Toto", modif: "updated", createdAt: "05/09/2017" }, { name: "Toto", modif: "deleted", createdAt: "05/10/2017" }],
unique = objects.filter(function (hash) {
return function (o) {
if (!hash[o.name]) {
hash[o.name] = true;
return true;
}
};
}(Object.create(null)));
console.log(unique);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
过滤数组以仅包含这些元素,以便搜索具有该名称的数组中的第一个元素,从而产生该元素。
data.filter(elt => data.find(elt2 => elt.name === elt2.name) === elt)
答案 2 :(得分:0)
IMO解决此问题的最有效方法是在保持为密钥设置的第一个值的同时,通过您关心的密钥减少数组。
var uniqueObjectsByKey = function(array, key){
return Object.values(array.reduce(function(obj, value) {
obj[value[key]] = obj[value[key]] !==undefined ? obj[value[key]] : value;
return obj
}, {}))
}
var array = [
{name: "Toto", modif: "added", createdAt : "05/08/2017"},
{name: "Toto", modif: "updated", createdAt: "05/09/2017"},
{name: "Toto", modif: "deleted", createdAt: "05/10/2017"}
]
uniqueObjectsByKey(array, 'Toto')

或者,如果你想要一个ES6一行,其中YOUR_ARRAY是你的对象数组,而FILTER_KEY是你想要唯一对象的键:
Object.values(YOUR_ARRAY.reduce((obj, value) => ({[value[FILTER_KEY]]]: value[FILTER_KEY], ...obj }), {}))