处理对象操作数组

Jay*_*Jay 0 javascript arrays reactjs

下面我有一个对象数组

var data = [{
  "time": "1572024707.4763825",
  "rssi": "32",
  "id": "77777"
}, {
  "time": "1572024709.0991757",
  "rssi": "32",
  "id": "77777"
}, {
  "time": "1572024704.4570136",
  "rssi": "32",
  "id": "555555"
}, {
  "time": "1572024708.3903246",
  "rssi": "32",
  "id": "77777"
}, {
  "time": "1572024699.7132683",
  "rssi": "32",
  "id": "66666"
}]
Run Code Online (Sandbox Code Playgroud)

如何重组它以删除最旧的重复ID

我试图从数组中提取所有唯一ID,以便可以遍历数据数组,但是代码开始变得太长。

  data.forEach(item => {

    IDs.push(item.id);
  });

  var unqIDs = [...new Set(IDs)];
  console.log(unqIDs);
Run Code Online (Sandbox Code Playgroud)

输出应如下所示

outPutShouldBe = [{
  "time": "1572024699.7132683",
  "rssi": "32",
  "id": "66666"
},{
  "time": "1572024709.0991757",
  "rssi": "32",
  "id": "77777"
},  {"time": "1572024704.4570136",
  "rssi": "32",
  "id": "555555"
}
]
Run Code Online (Sandbox Code Playgroud)

Wil*_*des 5

使用forEach()find()filter()和filter()决定要返回哪个元素

var data = [{"time": "1572024707.4763825","rssi": "32","id": "77777"},{"time": "1572024709.0991757","rssi": "32","id": "77777"}, {"time": "1572024704.4570136","rssi": "32","id": "555555"}, {"time": "1572024708.3903246","rssi": "32","id": "77777"}, {"time": "1572024699.7132683","rssi": "32","id": "66666"}]

let resultsArray = []

data.forEach(obj=>{
  const foundObj = resultsArray.find(data => data.id === obj.id)

  if(foundObj && new Date(foundObj.time) > new Date(obj.time)){
     const filteredArray = resultsArray.filter(data => data.id === obj.id)
     resultsArray = [...filteredArray , foundObj]
  } else if (!foundObj){
     resultsArray.push(obj)
  }
})

console.log(resultsArray)
Run Code Online (Sandbox Code Playgroud)