Javascript 为什么下划线';这两者的区别只有一种作用
如果我说“这些数组之间有什么区别?['a']和['a','b']?”,你会说“b”对吗 我想知道下划线在默认情况下没有双向差异的原因是什么?您将如何结合其他方法来实现这一点Javascript 为什么下划线';这两者的区别只有一种作用,javascript,arrays,underscore.js,difference,Javascript,Arrays,Underscore.js,Difference,如果我说“这些数组之间有什么区别?['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"] 为了澄清,我希
var a = ['js-email'],
b = ['js-email', 'form-group'],
c = _.difference(a, b), // result: []
d = _.difference(b, a); // result: ["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");
如果您想在整个项目中,将其作为\uu
库本身的一部分提供,那么您可以像这样使用它
_.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");
.difference
,就像PHP的数组_diff
函数和其他类似函数一样,返回第一个数组中的所有项,这些项不会出现在传递给它的任何其他数组中
这意味着“a中不在b中的事物”与“b中不在a中的事物”非常不同,这是有充分理由的——这是预期的行为
如果您想要本质上是双向差异,则需要双向运行函数,然后去除结果中的重复项。
\uDifference
接受可变数量的数组作为参数:
与Wither类似,但从数组返回其他数组中不存在的值
因此,设计上它只允许单向操作。你所说的不对称差异是什么意思?@thefourtheye我编辑了Q,请看最后一句话