在Javascript中从对象中删除多余重复项的最佳方法是什么?

时间:2017-09-11 04:36:48

标签: javascript arrays loops object duplicates

考虑Javascript中的以下对象(这是一个非常大的对象,所以我只包含了它的一部分)。

enter image description here

我想应用以下内容:

对于每个唯一身份用户,最多允许4个随机潜在客户,然后删除其余用户。

例如,如果我有10个不同的用户,每个用户每次出现5次,则对象中将有50条记录。我想每个用户只保留4个(无论哪个4个都没关系)。这将留下总共40条记录。

我不确定从哪个问题开始,但这是我到目前为止所做的:

1)创建一个包含不同用户列表的数组:

["1116", "1075", "1124"]

2)我不知道下一步该做什么。我的猜测是我需要遍历我的对象(让我们称之为潜在客户),然后将其与唯一用户数组进行比较。如果匹配,则应增加计数器,但如果计数器= 4,则应跳过引导。这是我的伪代码:

        for (var i = 0; i < leads.length; i++) {
      if (leads[i].user == //anything in the users array//) {
        //check for existing count property on the unique users array
        // if not exist, add a count property to the users array
        // else, if the count is 4, destroy [leads[i]]
      }//end if
    }//end for

我是否在正确的轨道上?或者JavaScript有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

您可以使用array#reduce。创建一个物体并推动铅,一旦它的长度等于4,就停止推动它。

&#13;
&#13;
var leads = [{lead_id: 2433867, user : '1116'}, {lead_id: 2433868, user : '1116'}, {lead_id: 2433869, user : '1116'}, {lead_id: 2433870, user : '1116'}, {lead_id: 2433871, user : '1116'}, {lead_id: 2433872, user : '1116'}, {lead_id: 2433873, user : '1116'}, {lead_id: 2433874, user : '1116'}];

var result = leads.reduce((res, lead) => {
  res[lead.user] = res[lead.user] || [];
  if(res[lead.user].length < 4)
    res[lead.user].push(lead); 
  return res;
},{})

console.log(Object.values(result)[0]);
&#13;
&#13;
&#13;