繁体   English   中英

从对象数组中删除重复项-下划线

[英]Remove duplicates from object array - Underscore

尝试使_.uniq()在以下结构上工作:

[
    {'x' : 1, 'y': 2},
    {'x' : 1, 'y': 2},
    {'x' : 2, 'y': 3},
    {'x' : 2, 'y': 4},
    {'x' : 3, 'y': 4}
]

结果应该是:

[
    {'x' : 1, 'y': 2},
    {'x' : 2, 'y': 3},
    {'x' : 2, 'y': 4},
    {'x' : 3, 'y': 4}
]

即删除重复项。 我想避免字符串化,因为然后只需要将每个解析回一个JSON对象即可。

任何帮助,将不胜感激。

编辑:在下面寻找马特的解决方案,我错过了一些我认为的东西-这不起作用。 如果我记录a和b的值,我会看到

_.uniq($scope.validNotes, function (a, b) {
    console.log(a, b);
    return a.x === b.x && a.y === b.y;
});


Object {x: 2, y: 3} 0 
Object {x: 1, y: 0} 1 
Object {x: 2, y: 3} 2 
Object {x: 3, y: 2} 3 
Object {x: 4, y: 2} 4
Object {x: 5, y: 1} 5

显然这意味着我永远都找不到骗子

因为两个对象不是===== ,仅仅因为它们具有相同的键,所以您将需要使用uniq()函数[iterator]参数

_.uniq(myArray, function (item) {
    return item.x + item.y;
});

注意,您将需要返回唯一的字符串组合; 考虑{ x: 11, y: 1 }{ x: 1, y: 11 } 我的代码会将两者解析为111 ,并将它们视为相同。

就像是:

_.uniq(myArray, function (item) {
    return 'x:' + item.x + 'y:' + item.y;
});

……将更具弹性,但这当然取决于您的数据值。

如果您的JSON中具有抽象数据结构,则最好使用stringify比较数组元素与字符串一样。 因为每个数组元素中都有一个新对象,所以每个文字对象表示法(即{}都会以JavaScript语言创建新对象,并且具有相同的属性或不具有相同的属性。

但是,如果您有x,y这样的结构,请使用马特答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM