Javascript 从对象数组中删除除最后一个键以外的所有类似键
我有一个对象数组。许多obk=JECT具有相同的键。如何从数组中删除除最后一个键外具有相同键的所有对象 这是我的对象数组:Javascript 从对象数组中删除除最后一个键以外的所有类似键,javascript,jquery,arrays,object,ecmascript-6,Javascript,Jquery,Arrays,Object,Ecmascript 6,我有一个对象数组。许多obk=JECT具有相同的键。如何从数组中删除除最后一个键外具有相同键的所有对象 这是我的对象数组: [ {d0: "abc"}, {d0: "xyz"}, {d1: "abc"}, {d3: "xyz"}, {d3: "abc"} ] 我只希望数组中最后出现的object by key 基本上,我希望我的数组如下所示: [ {d0: "xyz"}, {d1: "abc"}, {d3: "abc"} ] 我不知道该怎么办 您可以使用reduce函数和跟踪
[
{d0: "abc"},
{d0: "xyz"},
{d1: "abc"},
{d3: "xyz"},
{d3: "abc"}
]
我只希望数组中最后出现的object by key
基本上,我希望我的数组如下所示:
[
{d0: "xyz"},
{d1: "abc"},
{d3: "abc"}
]
我不知道该怎么办 您可以使用reduce函数和跟踪器来跟踪您看到的项目。像这样
const arr = [{
d0: "abc"
},
{
d0: "xyz"
},
{
d1: "abc"
},
{
d3: "xyz"
},
{
d3: "abc"
}
]
const tracker = {}
result = arr.reduce((acc, cur) => {
const key = Object.keys(cur)[0];
if (tracker[key]) {
tracker[key][key] = cur[key]
} else {
acc.push(cur);
tracker[key] = cur;
}
return acc;
}, []);
console.log(result)
您可以使用reduce函数和跟踪器来跟踪所看到的项目。像这样
const arr = [{
d0: "abc"
},
{
d0: "xyz"
},
{
d1: "abc"
},
{
d3: "xyz"
},
{
d3: "abc"
}
]
const tracker = {}
result = arr.reduce((acc, cur) => {
const key = Object.keys(cur)[0];
if (tracker[key]) {
tracker[key][key] = cur[key]
} else {
acc.push(cur);
tracker[key] = cur;
}
return acc;
}, []);
console.log(result)
如果需要阵列,请执行以下操作:
您可以使用reduceRight
函数和包含Set
对象的闭包:
arr.reduceRight(((s = new Set()) =>
(acc, obj, i) => s.has((key = Object.keys(obj)[0])) ?
acc :
( s.add(key), acc.push(obj), acc )
)(), []);
let-arr=[
{d0:“abc”},
{d0:“xyz”},
{d1:“abc”},
{d3:“xyz”},
{d3:“abc”}
]
让结果=arr.reduceRight((s=新集合())=>
(acc,obj,i)=>s.has((key=Object.keys(obj)[0]))?
行政协调会:
(s.add(按键)、acc.push(obj)、acc)
)(), []);
控制台日志(结果)代码>如果需要阵列:
您可以使用reduceRight
函数和包含Set
对象的闭包:
arr.reduceRight(((s = new Set()) =>
(acc, obj, i) => s.has((key = Object.keys(obj)[0])) ?
acc :
( s.add(key), acc.push(obj), acc )
)(), []);
let-arr=[
{d0:“abc”},
{d0:“xyz”},
{d1:“abc”},
{d3:“xyz”},
{d3:“abc”}
]
让结果=arr.reduceRight((s=新集合())=>
(acc,obj,i)=>s.has((key=Object.keys(obj)[0]))?
行政协调会:
(s.add(按键)、acc.push(obj)、acc)
)(), []);
控制台日志(结果)代码>翻转:向后迭代时保留第一个。(这也可以通过简单的反转、先取、反转来实现:在如何查找/先取值方面没有不足。通常使用字典实现。在这种特定情况下,可能还需要Object.keys()[0]将第一个/唯一一个键作为值。)@user2864740,感谢您的回复。但是我不确定你所说的翻转它是什么意思翻转它:在向后迭代时保持第一个。(这也可以通过简单的反转、先取、反转来实现:在如何查找/先取值方面没有不足。通常使用字典实现。在这种特定情况下,可能还需要Object.keys()[0]将第一个/唯一一个键作为值。)@user2864740,感谢您的回复。但是我不知道你所说的翻转是什么意思,它可以在不使用reduce的情况下“完全相同”,因为该方法依赖于副作用。可以在不使用reduce的情况下“完全相同”,因为该方法依赖于副作用。谢谢你的回复。但是如何在数组中创建这些对象呢?这只是一个数组。可能是:[{},{},{}]@nb_nb_nb哦,我明白了。当然,给我一点时间谢谢你的回复。但是如何在数组中创建这些对象呢?这只是一个数组。可能是:[{},{},{}]@nb_nb_nb哦,我明白了。当然,给我一点时间