Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么下划线';这两者的区别只有一种作用_Javascript_Arrays_Underscore.js_Difference - Fatal编程技术网

Javascript 为什么下划线';这两者的区别只有一种作用

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"] 为了澄清,我希

如果我说“这些数组之间有什么区别?['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"]


为了澄清,我希望无论数组的传递顺序如何,差异总是相等。

您可以将两个项目之间的差异在两个方向上组合起来

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,请看最后一句话