如何按键值对对对象数组进行重复数据删除?

// This is a large array of objects, e.g.:

let totalArray = [

    {"id":"rec01dTDP9T4ZtHL4","fields":

    {"user_id":170180717,"user_name":"abcdefg","event_id":516575,

    }]


let uniqueArray = [];


let dupeArray = [];


let itemIndex = 0


totalArray.forEach(x => {

  if(!uniqueArray.some(y => JSON.stringify(y) === JSON.stringify(x))){

    uniqueArray.push(x)

  } else(dupeArray.push(x))

})


node.warn(totalArray);

node.warn(uniqueArray);

node.warn(dupeArray);


return msg;

我需要我的代码通过数组中对象中的键值user_id来标识数组中的重复项。现在,我的代码用于标识数组中的相同对象,但我需要它来根据对象内的键值来标识重复项。我该怎么做?我正在努力弄清楚如何通过 for 每个循环来识别基于键值而不是整个对象的重复。


跃然一笑
浏览 114回答 3
3回答

素胚勾勒不出你

现在,我的代码用于标识数组中的相同对象,但我需要它来根据对象内的键值来标识重复项。我该怎么做?不要比较整个对象的 JSON 表示形式,而只比较它们的属性。user_idtotalArray.forEach(x => {  if(!uniqueArray.some(y => y.fields.user_id === x.fields.user_id)){    uniqueArray.push(x)  } else(dupeArray.push(x))})

当年话下

一种方法是保留到目前为止找到的ID列表,并采取相应的行动:totalArray = [  { id: 1, val: 10 },  { id: 2, val: 20 },  { id: 3, val: 30 },  { id: 2, val: 15 },  { id: 1, val: 50 }]const uniqueArray = []const dupeArray = []const ids = {}totalArray.forEach( x => {  if (ids[x.id]) {    dupeArray.push(x)  } else {     uniqueArray.push(x)    ids[x.id] = true  }})for (const obj of uniqueArray) console.log("unique:",JSON.stringify(obj))for (const obj of dupeArray)   console.log("dupes: ",JSON.stringify(obj))

慕雪6442864

您可以采取 a 并推送到唯一项或重复项。Setvar array = [        { id: 1, data: 0 },        { id: 2, data: 1 },        { id: 2, data: 2 },        { id: 3, data: 3 },        { id: 3, data: 4 },        { id: 3, data: 5 },    ],    uniques = [],    duplicates = [];array.forEach(    (s => o => s.has(o.id) ? duplicates.push(o) : (s.add(o.id), uniques.push(o)))    (new Set));console.log(uniques);console.log(duplicates);.as-console-wrapper { max-height: 100% !important; top: 0; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript