Javascript 从对象数组中删除除最后一个键以外的所有类似键

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函数和跟踪

我有一个对象数组。许多obk=JECT具有相同的键。如何从数组中删除除最后一个键外具有相同键的所有对象

这是我的对象数组:

[
 {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哦,我明白了。当然,给我一点时间