gpt4 book ai didi

javascript - 如何在对象上使用下划线的 "intersection"?

转载 作者:IT王子 更新时间:2023-10-29 03:07:00 27 4
gpt4 key购买 nike

_.intersection([], [])

只适用于基本类型,对吧?

它不适用于对象。我怎样才能让它与对象一起工作(可能通过检查“Id”字段)?

var a = [ {'id': 1, 'name': 'jake' }, {'id':4, 'name': 'jenny'} ]
var b = [ {'id': 1, 'name': 'jake' }, {'id': 9, 'name': 'nick'} ]

在这个例子中,结果应该是:

_.intersection(a, b);

[ {'id': 1, 'name': 'jake' } ];

最佳答案

您可以根据下划线的功能创建另一个功能。您只需更改原始功能的一行代码:

_.intersectionObjects = function(array) {
var slice = Array.prototype.slice; // added this line as a utility
var rest = slice.call(arguments, 1);
return _.filter(_.uniq(array), function(item) {
return _.every(rest, function(other) {
//return _.indexOf(other, item) >= 0;
return _.any(other, function(element) { return _.isEqual(element, item); });
});
});
};

在这种情况下,您现在可以使用下划线的 isEqual() 方法而不是 JavaScript 的相等比较器。我用你的例子试过了,它起作用了。以下是 underscore 关于 isEqual 函数的文档的摘录:

_.isEqual(object, other) 
Performs an optimized deep comparison between the two objects, to determine if they should be considered equal.

您可以在此处找到文档:http://documentcloud.github.com/underscore/#isEqual

我把代码放在了 jsFiddle 上,所以你可以测试并确认它:http://jsfiddle.net/luisperezphd/jrJxT/

关于javascript - 如何在对象上使用下划线的 "intersection"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8672383/

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