Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从对象数组中删除所有重复?_Javascript_Arrays - Fatal编程技术网

Javascript 如何从对象数组中删除所有重复?

Javascript 如何从对象数组中删除所有重复?,javascript,arrays,Javascript,Arrays,我正在成功地重复阵列以仅生成唯一值。问题是,我需要删除两个重复项,例如:如果有两个对象具有相同的用户id密钥,我希望从数组中删除两个对象,而不是一个 一个选项是迭代数组,并将当前正在迭代的对象放在该对象的user_id属性上。如果该属性已存在,请将其重新指定为null。最后,获取对象的值并删除空值: 常量totalArray=[{ id:rec01dTDP9T4ZtHL4, 字段:{ 用户id:170180717, 用户名:abcdefg, 活动编号:516575, } }, { id:rec

我正在成功地重复阵列以仅生成唯一值。问题是,我需要删除两个重复项,例如:如果有两个对象具有相同的用户id密钥,我希望从数组中删除两个对象,而不是一个

一个选项是迭代数组,并将当前正在迭代的对象放在该对象的user_id属性上。如果该属性已存在,请将其重新指定为null。最后,获取对象的值并删除空值:

常量totalArray=[{ id:rec01dTDP9T4ZtHL4, 字段:{ 用户id:170180717, 用户名:abcdefg, 活动编号:516575, } }, { id:rec01dTDP9T4ZtHL4, 字段:{ 用户id:170180717, 用户名:abcdefg, 活动编号:516575, } }, { id:独一无二, 字段:{ 用户id:1234, 用户名:abcdefg, 活动编号:516575, } }]; const uniques={}; 对于totalArray的常量项{ const prop=item.fields.user\u id; uniques[prop]=uniques.hasOwnPropertyprop 无效的 :项目; } 常量输出=Object.valuesuniques.filterBoolean;
console.logoutput 您可以首先根据用户id对对象进行分组。然后根据组大小对对象进行分区。如果组只包含一条记录,则该记录是唯一的。然后将这些组展平,使其最终成为一个普通的记录数组,而不是一个记录组数组

函数groupByiterable,fn{ 常量组=新映射; 对于iterable的常量项{ const key=fn项; 如果!groups.haskey groups.setkey,[]; groups.getkey.pushitem; } 返回组; } 功能可划分,fn{ 常量truthy=[],falsy=[]; 对于iterable的常量项{ fnitem?truthy:falsy.pushitem; } 返回[真理,法尔西]; } 常量totalArray=[{ id:rec01dTDP9T4ZtHL4, 字段:{ 用户id:170180717, 用户名:abcdefg, 活动编号:516575, } }, { id:rec01dTDP9T4ZtHL4, 字段:{ 用户id:170180717, 用户名:abcdefg, 活动编号:516575, } }, { id:独一无二, 字段:{ 用户id:1234, 用户名:abcdefg, 活动编号:516575, } }]; 常量[uniqueArray,duperray]= 隔断 groupBytotalArray,record=>record.fields.user\u id.values, group=>group.length==1 .mapgroups=>groups.flat1; console.loguniqueArray=,uniqueArray; console.logduperray=,duperray 您可以使用Array.reduce&&Array

设totalArray=[ { id:rec01dTDP9T4ZtHL4, 领域: { 用户id:170180717, 用户名:abcdefg, 活动编号:516575, } }, { id:rec01dTDP9T4ZtHL4, 领域: { 用户id:170180717, 用户名:abcdefg, 活动编号:516575, } }, { id:rec01dTDP9T4ZtHL4, 领域: { 用户id:1470107417, 用户名:abcdefg, 活动编号:516575, } }, { id:rec01dTDP9T4ZtHL4, 领域: { 用户id:1470107417, 用户名:abcdefg, 活动编号:516575, } }, { id:rec01dTDP9T4ZtHL4, 领域: { 用户id:14701073417, 用户名:abcdefg, 活动编号:516575, } } ]; 让removeDups=totalArray.reduceresult,项,索引,原始=>{ 如果original.someo,i=>o.fields.user\u id===item.fields.user\u id&&i!==索引返回结果; 结果.项目; 返回结果; },[]
console.logremoveDups;之间是否应该有空白?空的呢?我得到了一个错误:在“?”之前有错误的换行。这是不必要的,但大多数人会发现,当操作符与其操作数至少间隔一个空格时,它更可读?null在我看来真的很奇怪。如果你有一个禁止它的linting规则,请根据你的应用程序的标准来修复它project@CertainPerformance为什么const uniques={}设置为空对象?@GPP该对象用作一种机制,用于检查到目前为止遇到特定用户id的次数。它一开始是空的,因为在脚本的开头没有迭代任何元素。uniques[prop]=uniques.hasOwnPropertyprop?null:项目也可以写为uniques[prop]=!uniques.hasOwnPropertyprop&&item取决于首选的编程风格。此外,您可以检查结果数组是否不包含当前项,并且它的性能更高。
// 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.fields.user_id) === JSON.stringify(x.fields.user_id))){
    uniqueArray.push(x)
  } else(dupeArray.push(x))
})

node.warn(totalArray);
node.warn(uniqueArray);
node.warn(dupeArray);

return msg;