Javascript lodash/下划线;比较两个对象并删除重复项
如下图所示,我返回了一些jsonJavascript lodash/下划线;比较两个对象并删除重复项,javascript,json,object,underscore.js,lodash,Javascript,Json,Object,Underscore.js,Lodash,如下图所示,我返回了一些jsondata,其中包含三个对象;每个都包含一个客户端id=>数据 exact_match : {104} match_4 : {104, 103} match_2 : {104, 103, 68} 如何根据以前的对象“修剪”或删除重复的对象?比如: exact_match : {104} match_4 : {103} match_2 : {68} var unique = {}; // Assume I copy and pasted alreadyF
data
,其中包含三个对象;每个都包含一个客户端id=>数据
exact_match : {104}
match_4 : {104, 103}
match_2 : {104, 103, 68}
如何根据以前的对象“修剪”或删除重复的对象?比如:
exact_match : {104}
match_4 : {103}
match_2 : {68}
var unique = {};
// Assume I copy and pasted alreadyFound here
var alreadyFound = ...;
for (var object in data) {
// Iterate through ids in each object in data
for (var id in object) {
// Remove this entry if it's already found
if (alreadyFound(id)) {
delete object[id];
}
}
}
我尝试过,但没有成功(可能是因为它是针对数组而不是对象的):
任何帮助都将不胜感激:)
更新
我需要返回的值具有相同的对象数据,而不是一个新数组:)看起来您想要区分键(或者更确切地说,使用-) 或者,如果要在对象内进行比较,也可以将对象转换为成对数组():
我将创建一个名为
unique
的映射,例如var unique={}
然后迭代数据中的每个键,并检查它是否在unique
中。如果它在unique
中,请删除与该键关联的条目,从而删除重复项
您可以将此签出作为alreadyFound
方法:
var alreadyFound = function (key) {
if (!(key in unique)) {
unique[key] = true;
return false;
}
return true;
};
然后迭代数据并检查数据中的alreadyFound(key)
以查找key
,如果alreadyFound(key)
返回true
,则删除该键
您可能会弄乱lodash/下划线方法,但这些方法可能效率低下,这取决于您如何使用它们(以及如何实现它们),并且这应该在线性时间内运行
对于您的特定用例,完整的解决方案可能是:
exact_match : {104}
match_4 : {103}
match_2 : {68}
var unique = {};
// Assume I copy and pasted alreadyFound here
var alreadyFound = ...;
for (var object in data) {
// Iterate through ids in each object in data
for (var id in object) {
// Remove this entry if it's already found
if (alreadyFound(id)) {
delete object[id];
}
}
}
谢谢你们的回答,我真的很感谢你们抽出时间 我进一步搜索,发现Lodash开发者帮助我找到了这个片段
var数据={
精确匹配:{
104: {
供应商编号:104
}
},
匹配四位数字:{
104: {
供应商编号:104
},
68: {
供应商编号:68
}
},
匹配两位数字:{
104: {
供应商编号:104
},
68: {
供应商编号:68
},
103: {
供应商编号:103
},
999: {
供应商识别码:999
}
}
};
var arr_match_four_digits=u.difference(u.keys(data.match_four_digits),u.keys(data.exact_match));
var arr_match_two_digits=u.difference(u.keys(data.match_two_digits),u.keys(data.match_two_digits),u.keys(data.exact_match));
$('#output1').html(JSON.stringify(data));
$('#output2').html(JSON.stringify(u.pick(data.match_四位数,arr_四位数));
$('#output3').html(JSON.stringify(u.pick(data.match_两位数,arr_匹配_两位数))代码>
数据
arr\u匹配四位数字
匹配两个数字
您是否尝试过使用.keys
?相同的对象引用,或使用相同键的新对象?@AdamBoduch谢谢,我已经找到了解决方案。.谢谢您的..key提示!
var unique = {};
// Assume I copy and pasted alreadyFound here
var alreadyFound = ...;
for (var object in data) {
// Iterate through ids in each object in data
for (var id in object) {
// Remove this entry if it's already found
if (alreadyFound(id)) {
delete object[id];
}
}
}