gpt4 book ai didi

Javascript:查找匹配多个字段的对象数组值重复项

转载 作者:行者123 更新时间:2023-11-29 21:16:33 24 4
gpt4 key购买 nike

给定这个对象数组:

[ { source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A2', target_q_id: null },
{ source_q_id: 'Q6A2', target_q_id: null },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' },
{ source_q_id: 'Q7', target_q_id: null },
{ source_q_id: 'Q7', target_q_id: null }]

我需要一个新的键/值重复数组:

  [ { source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q5D', target_q_id: 'Q7' },
{ source_q_id: 'Q6A1', target_q_id: 'Q7' },
{ source_q_id: 'Q6A2', target_q_id: null },
{ source_q_id: 'Q6A3', target_q_id: 'Q7' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' },
{ source_q_id: 'Q7', target_q_id: null }]

我正在使用这个 SO answer 中的代码,但它删除了太多 target_q_id 独特的欺骗,因为它没有计算 source_q_id 欺骗:

[ { source_q_id: 'Q2B', target_q_id: null },
{ source_q_id: 'Q5C', target_q_id: 'Q7' },
{ source_q_id: 'Q6B', target_q_id: 'Q6A2' } ]

代码:

function dupesOnly(arr, 'target_q_id') {
var seen = {},
ret = [];

arr.forEach(function(item) {
var key = item[field],
val = seen[key];

if (!val) {
seen[key] = val = {
initial: item,
count: 0
}
}

if (val.count === 1) {
ret.push(val.initial);
}
++val.count;
});

return ret;
}

我将如何修改代码以找到 source_q_idtarget_q_id 的唯一重复项?

最佳答案

您可以简单地组合这些属性并将其用作集合中的键。
另一个注意事项:如果你在 .forEach.push 项目,那么你很可能做错了什么。

尝试使用Array.prototype.filter:

Array.prototype.uniqueBy = function(keyBuilder) {
var seen = {};
return this.filter(function(o) {
// build a filter key using a provided function
var key = keyBuilder(o);

// if item already exists - do not add to the result
if (seen[key])
return false;

// add item to the set and add item to the result
// shortand for:
// seen[key] = true; return true;
return (seen[key] = true);
});
}

var obj = [{source_q_id:'Q2B',target_q_id:null},{source_q_id:'Q2B',target_q_id:null},{source_q_id:'Q2B',target_q_id:null},{source_q_id:'Q5C',target_q_id:'Q7'},{source_q_id:'Q5C',target_q_id:'Q7'},{source_q_id:'Q5C',target_q_id:'Q7'},{source_q_id:'Q5D',target_q_id:'Q7'},{source_q_id:'Q5D',target_q_id:'Q7'},{source_q_id:'Q5D',target_q_id:'Q7'},{source_q_id:'Q6A1',target_q_id:'Q7'},{source_q_id:'Q6A1',target_q_id:'Q7'},{source_q_id:'Q6A1',target_q_id:'Q7'},{source_q_id:'Q6A2',target_q_id:null},{source_q_id:'Q6A2',target_q_id:null},{source_q_id:'Q6A3',target_q_id:'Q7'},{source_q_id:'Q6A3',target_q_id:'Q7'},{source_q_id:'Q6A3',target_q_id:'Q7'},{source_q_id:'Q6B',target_q_id:'Q6A2'},{source_q_id:'Q6B',target_q_id:'Q6A2'},{source_q_id:'Q7',target_q_id:null},{source_q_id:'Q7',target_q_id:null}];
var objFiltered = obj.uniqueBy(function(o) {
return o.source_q_id + "~~~" + o.target_q_id;
});
console.log(objFiltered);

关于Javascript:查找匹配多个字段的对象数组值重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39198320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com