如果我要说“这些数组之间有什么区别?[‘a’]和[‘a’,’b’]?”你会说’b’对吗?
我想知道下划线默认没有双向差异的原因是什么?你将如何结合其他方法来实现这一目标?
var a = ['js-email'],
b = ['js-email', 'form-group'],
c = _.difference(a, b), // result: []
d = _.difference(b, a); // result: ["form-group"]
为了澄清,无论数组传递的顺序如何,我都希望区别总是等于[‘form-group’].
解决方法:
您可以在两个方向上组合两个项目之间的差异.
function absDifference(first, second) {
return _.union(_.difference(first, second), _.difference(second, first));
}
console.assert(absDifference(["a", "b"], ["a", "c"]).toString() == "b,c");
var a = ["js-email"], b = ["js-email", "form-group"];
console.assert(absDifference(a, b).toString() == "form-group");
如果您希望在整个项目中将其作为_库本身的一部分提供,那么您可以像这样使用_.mixin
_.mixin({
absDifference: function(first, second) {
return _.union(_.difference(first, second), _.difference(second, first));
}
});
然后
console.assert(_.absDifference(["a", "b"], ["a", "c"]).toString() == "b,c");
var a = ["js-email"],
b = ["js-email", "form-group"];
console.assert(_.absDifference(a, b).toString() == "form-group");