我有两个包含字符串的数组,例如:
a = ['a', 'b', 'a']
b = ['b', 'a', 'a']
我发现我可以使用lodash:
_.isEmpty(_.xor(a,b))
确保两者相等 但是,如果我在数组中有重复的值,则此方法似乎失败,例如:
a = ['a', 'b', 'a']
b = ['b', 'a']
上面的方法对于这种情况将返回true(它将打印它们是相等的)虽然我在数组中有2个'a'而在b中只有1个。
执行此比较的任何优雅方式?
答案 0 :(得分:1)
function isEqual(a, b) {
return [...new Set(a.concat(b)] // Get an array of unique elements of both arrays
.filter(t =>
// Filter on those elements whose count in both arrays is different
a.filter(at=>at===t).length !== b.filter(bt=>bt===t).length
)
.length === 0
}
console.log(['a','b'], ['b','a','a'], isEqual(['a','b'], ['b','a','a']))
console.log(['a','b','a'], ['b','a','a'], isEqual(['a','b','a'], ['b','a','a']))
答案 1 :(得分:0)
如果您不想对数组进行排序,我建议如下。您获取一个数组并从另一个数组中删除每个项目。如果某个项目无法在任何时候删除,或者该数组最后仍然包含任何项目,则它们不相等。
var a = ['a', 'b', 'a']
var b = ['b', 'a', 'a']
function areEqual(a, b) {
var flag = true;
b.forEach((letter) => {
let i = a.indexOf(letter);
if(i == -1) { flag = false; }
else a.splice(i, 1);
});
if(flag && a.length == 0) { return true; }
else { return false; }
}
console.log(areEqual(a,b));