考虑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有更好的方法吗?
答案 0 :(得分:3)
您可以使用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]);
&#13;