【问题标题】:What is the best way to remove excessive duplicates from an object in Javascript?从 Javascript 中的对象中删除过多重复项的最佳方法是什么?
【发布时间】:2018-02-19 06:08:54
【问题描述】:

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

我想应用以下内容:

对于每个唯一用户,最多允许 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 有更好的方法来做到这一点?

【问题讨论】:

  • 是的,你在正确的轨道上。祝你好运。
  • 创建一个查找表或映射对象,其中user 值是键,并将lead_id 存储为值数组。查找user 和如果数组长度lead_id
  • 您也可以更改结构,例如 { useId: 1234, lead_ids: [a,b,c,d] } 甚至更好的 users = { 123 : [a, b, c, d], 456 : [x,y,z] }

标签: javascript arrays loops object duplicates


【解决方案1】:

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

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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2020-08-10
    • 2010-09-26
    相关资源
    最近更新 更多