Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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 Ramda,数组相等,不考虑顺序_Javascript_Ramda.js - Fatal编程技术网

Javascript Ramda,数组相等,不考虑顺序

Javascript Ramda,数组相等,不考虑顺序,javascript,ramda.js,Javascript,Ramda.js,比较数组时,只有当两个数组以相同的顺序持有相同的值时,ramdaequals才会返回true 我需要一个函数来检查两个数组是否包含完全相同的值,但忽略值出现的顺序 现在我是这样做的: const equalLength = (arr1, arr2) => arr1.length === arr2.length export const equalIgnoreOrder = (arr1, arr2) => equalLength(arr1, arr2) && eq

比较数组时,只有当两个数组以相同的顺序持有相同的值时,ramda
equals
才会返回true

我需要一个函数来检查两个数组是否包含完全相同的值,但忽略值出现的顺序

现在我是这样做的:

const equalLength = (arr1, arr2) => arr1.length === arr2.length

export const equalIgnoreOrder = (arr1, arr2) =>
  equalLength(arr1, arr2) && equalLength(arr1, R.union(arr1, arr2))

但我想知道是否还有一个更“开箱即用”的解决方案?

我认为你的答案很好。稍微短一点的就可以了

const equalIgnoreOrder = compose(isEmpty, symmetricDifference)

对我来说,这更符合逻辑,因为检查相同的元素更像是一个差异问题,而不是工会问题;与涉及
长度的概念相比,它更接近于集合的数学概念。但这是一个很小的问题。

谢谢,我同意
工会在这里感觉不太好,这就是促使我提出这个问题的原因。我有一个版本使用了
差异
,但它和您的一样,将匹配[1,2,3]和[1,1,2,3]。在集合中思考,这不应该是一个问题,但对于我的用例来说,这样的状态(重复)将表明我的程序中存在错误。再说一次,我可能应该在填充数组时,而不是在比较数组时,防止重复。虽然Ramda没有提供公共
Set
实现,但有一个模型可以作为如何处理集合值相等的模型。我喜欢它,非常干净和简单为什么不使用sort<代码>等于(arrayA.sort(),arrayB.sort())