我想看看两个字符串数组是否相等。
例如:
compare(["abc", "def"], ["def", "abc"])
应该返回true
,同样地,
compare(["abc", "def"], ["def", "ghi"])
应该返回false
。
这样做的最佳方式是什么?
答案 0 :(得分:3)
JavaScript没有Set或Multiset数据结构(至少不是具有广泛浏览器支持的数据结构),这是您通常用于测试两组项目是否相同的,无论订购。所以我建议对数组进行排序并检查它们的内容是否相等。如果您知道数组只包含字符串,则可以使用简单的相等性检查项目:
function compare(array1, array2) {
if (array1.length != array2.length) {
return false;
}
array1 = array1.slice();
array1.sort();
array2 = array2.slice();
array2.sort();
for (var i = 0; i < array1.length; i++) {
if (array1[i] != array2[i]) {
return false;
}
}
return true;
}
console.log(compare(["abc", "def"], ["def", "abc"])); // true
console.log(compare(["abc", "def"], ["def", "ghi"])); // false
对于更一般的情况,您需要更复杂的平等定义,我建议浏览this question的答案。
答案 1 :(得分:2)
朴素算法:O(N ^ 2)
function compare(array1, array2){
for (var i = 0; i < array1.length; i++){
if (array2.indexOf(array1[i]) < 0) return false;
}
return true;
}
更好的一个:(使用排序,O(NLOGN))
function compare(array1, array2){
array1.sort();
array2.sort();
for (var i = 0; i < array1.length; i++){
if (array1[i] !== array2[i]) return false;
}
return true;
}
答案 2 :(得分:0)
统一解决方案:
function compare(a, b){
var isEqual = false;
if (Array.isArray(a) && Array.isArray(b) && a.length == b.length){
a.sort();
b.sort();
var i;
for (i = 0; i < arr1.length; i++){
if (a[i] === b[i]){
isEqual = true;
} else{
isEqual = false;
break;
}
}
}
return isEqual;
}
var arr1 = ["def", "abc"], arr2 = ["abc", "def"];
console.log(compare(arr2,arr1)); // gives 'true'
console.log(compare(["abc", "def"], ["def", "ghi"])); // gives 'false'
答案 3 :(得分:0)
function compare(arr1, arr2){
var match = true
if(arr1.length != arr2.length){
match = false
}
arr1 = arr1.slice();
arr1.sort();
arr2.slice();
arr2.sort();
for(var i = 0; i < arr1.length; i++){
if(arr1[i] != arr2[i]){
match = false;
}
}
return match;
}
console.log(compare(["abc", "def"], ["def", "abc"])); // it will return true
console.log(compare(["abc", "def"], ["def", "ghi"])); // it will return false
答案 4 :(得分:0)
我建议遵循ES6-oneliner
const compare = (a1, a2) =>
(a1 = new Set(a1)) &&
(a2 = new Set(a2)) &&
a1.size === a2.size &&
[...a1].every(v => a2.has(v));
compare(['a', 'a'], ['a', 'b'])
应该返回false
)。compare(['a', 'b'], ['a', 'b', 'c'])
,应返回false
)。答案 5 :(得分:0)
JSON.stringify(array1.sort()) === JSON.stringify(array2.sort())