推送一个新数组并过滤javascript中的冗余对象

时间:2018-08-02 10:48:31

标签: javascript arrays sorting

我从ajax调用中接收到一个对象数组,其中一些对象是相同的,所以我想只将唯一对象推入另一个数组中。

receivedArray = [{name:italy, id:67},{name:italy, id:67},{name:france, id:89}]

我想要那个:

myArray = [{name:italy, id:67},{name:france, id:89}]

我该怎么做?

3 个答案:

答案 0 :(得分:1)

使用reducefindIndex方法。如果累加器数组已经有一个ID匹配的对象,则findIndex将返回该对象的索引。如果index为-1,则表示累加器数组没有该对象。在这种情况下,将该数组添加到累加器数组

let receivedArray = [{
  name: 'italy',
  id: 67
}, {
  name: 'italy',
  id: 67
}, {
  name: 'france',
  id: 89
}]


let myArray = receivedArray.reduce(function(acc, curr) {
  let findIndex = acc.findIndex(function(item) {
    return item.id === curr.id;
  })
  if (findIndex === -1) {
    acc.push(curr)
  }

  return acc;
}, [])
console.log(myArray)

答案 1 :(得分:0)

这可以在es6中轻松解决:

const receivedArray = [{name:'italy', id:67},{name:'italy', id:67},{name:'france', id:89}]
const newArr = receivedArray.filter((item, index, self) =>
  index === self.findIndex((i) => (
    i.id === item.id && i.name === item.name
  ))
)
console.log(newArr)

答案 2 :(得分:0)

您可以使用filterSet做这样的事情:

receivedArray = [{name:'italy', id:67},{name:'italy', id:67},{name:'france', id:89}]

mySet = new Set();

myArray = receivedArray.filter(e => {
  if (mySet.has(e['id'])) {
    return false;
  } else {
    mySet.add(e['id']);
    return true;
  }
})

console.log(myArray);