我有两个JavaScript数组,需要进行比较。例如,假设我有以下这两个数组:
var array1 = ["1", "2", "3", "4"];
var array2 = ["4", "1", "3", "2"];
这些数组实际上是相等的,我希望将它们进行比较时得到true
作为结果。有什么最好和最快的方法来完成这个操作吗?
我有两个JavaScript数组,需要进行比较。例如,假设我有以下这两个数组:
var array1 = ["1", "2", "3", "4"];
var array2 = ["4", "1", "3", "2"];
这些数组实际上是相等的,我希望将它们进行比较时得到true
作为结果。有什么最好和最快的方法来完成这个操作吗?
_.union
函数可以轻松解决这个问题。function setsEqual(a, b) {
var u = _.union(a, b);
return u.length === a.length && u.length === b.length;
}
Array.prototype.every
来实现。该方法可用于编程相关内容。请注意保留HTML标签。function setsEqual(a, b) {
return a.length === b.length
&& a.every(function (v) { return b.indexOf(v) !== -1; });
}
最好和最快的方法是使用对象来跟踪值及其计数。然后我们可以查看它是否存在于第二个数组中。试试这个:
function compare(arr1, arr2){
var obj={}, len = arr1.length, i=0, isSame=true, prop;
if(arr1.length === arr2.length){
for(;i<len;i++){
if(obj[arr1[i]]){
obj[arr1[i]] = obj[arr1[i]]+1;
} else{
obj[arr1[i]] =1;
}
}
i=0, len = arr2.length;
for(;i<len;i++){
if(obj[arr2[i]]){
obj[arr2[i]] = obj[arr2[i]]-1;
} else{
isSame = false;
break;
}
}
for (prop in obj){
if(obj[prop] > 0){
isSame = false;
break;
}
}
}else{
isSame = false;
}
return isSame;
}
在比较两个数组后,从函数返回状态。
arr1 = [101,12,13,10,4];
arr2 = [101,4,12,13,10];
function compareTwoArray(arr1, arr2) {
return arr1.length === arr2.length &&
arr1.sort().every((val, index)=> val === arr2.sort()[index]);
}
console.log(compareTwoArray(arr1, arr2))
尝试移除匹配的元素,直到两个元素都为空:
var array1 = ["1", "2", "3", "4", "1", "5"];
var array2 = ["1", "5", "2", "3", "4", "1"];
var isSame = false;
if(array1.length != array2.length)
isSame = false;
else
{
for(var i = 0; i < array1.length; i ++)
{
var removed = false;
for(var j = 0; j < array2.length; j ++)
{
if(array2[j] == array1[i])
{
// remove from array2
array1.splice(i, 1);
// remove from array1
array2.splice(j, 1);
// go back 1 for i
removed = true;
i --;
break;
}
}
if(!removed)
break;
}
if(array1.length == 0 && array2.length == 0)
isSame = true;
}
我不认为这是最快的方法,但对于一些基本数组可能会有用
function compareArrays(a, b) {
var copyA = a.slice(),
copyB = b.slice();
if (a.length !== b.length) { return false; }
return copyA.sort().toString() === copyB.sort().toString();
}
containsAll
方法。您也可以在相关标签中看到这一点 :) - Arkantos