如何在JavaScript中检测数组相等性?
JavaScript中有两个数组,它们的格式如下:如何在JavaScript中检测数组相等性?,javascript,arrays,string,equality,Javascript,Arrays,String,Equality,JavaScript中有两个数组,它们的格式如下: [{'drink':['alcohol', 'soft', 'hot']}, {'fruit':['apple', 'pear']}]; 我需要检测两个数组是否相等。如果它们以不同的顺序包含相同的元素,则认为它们相等。我该怎么做呢?这能回答你的问题吗? 你可以试试这个JSON.stringify(array1)==JSON.stringify(array2)如果希望两个数组中的顺序也相同 检查两个数组的长度 循环第一个数组,将每个变量与第二
[{'drink':['alcohol', 'soft', 'hot']}, {'fruit':['apple', 'pear']}];
我需要检测两个数组是否相等。如果它们以不同的顺序包含相同的元素,则认为它们相等。我该怎么做呢?这能回答你的问题吗?
你可以试试这个
JSON.stringify(array1)==JSON.stringify(array2)代码>如果希望两个数组中的顺序也相同
检查两个数组的长度
循环第一个数组,将每个变量与第二个数组进行比较
如果1
和2
都相同,则数组相等
用于比较对象/数组的函数:
可以通过for(var i=0;i通过Javascript实现真正数组的循环,您无法检查数组是否相等,但您可以这样比较它们:
var arr1 = ['alcohol', 'soft', 'hot'],
arr2 = ['apple', 'pear'],
arr3 = ['soft', 'hot', 'alcohol'];
function isSame(a1, a2){
return !(a1.sort() > a2.sort() || a1.sort() < a2.sort());
}
console.log( isSame(arr1, arr2) ); //false
console.log( isSame(arr1, arr3) ); //true
var arr1=[‘酒精’、‘软’、‘热’],
arr2=['苹果','梨'],
arr3=[‘软’、‘热’、‘酒精’];
函数名(a1,a2){
返回!(a1.sort()>a2.sort()| a1.sort()
< >代码>排序< /COD>将所有元素按相同的顺序排列,如果两者都是“代码> <代码和代码> <代码>比较是错误的,这意味着它们都是相同的。如果它们包含不同顺序的相同元素,或者它们必须与内容和顺序相同,那么它们是否相等?重要的是什么?是否意味着还检查DIF?不同的递归排序?如果第二个数组是[{'fruit':['pear','apple']},{'drink':['alcohol','hot','soft']}]
,则认为元素与所显示的数组相等(注意pear/apple交换)大小写重要吗,也就是说,pear和pear应该被视为相同的吗?可能重复的可能重复的可能重复的可能重复的对你有用,只是记住顺序在这里很重要。是的。我只是更新了答案:)都很好:)我不是想对你的回答大喊大叫,这是一个聪明的方法。我只是想确保警员知道这件事,因为他不知道specify@Sparky说得好。我把笔记的顺序颠倒了。我还更新了我的答案,并包含了一个比较函数。当语言速度慢得多的时候,使用旧的和编程的好处…你知道你可以用Javascript比较数组吗?知道它们是大还是小你什么意思?你真的读过问题+答案吗?@Rob。。。我想是的,你检查过我下面的答案了吗?有什么不对劲吗?它告诉我“compareArrays”不是一个函数。这不是很好,因为compareArrays不是Javascript中定义的内置函数,而且使用数组类这样的基本原型也不是很好的实践。
function recursiveCompare(obj, reference){
if(obj === reference) return true;
if(obj.constructor !== reference.constructor) return false;
if(obj instanceof Array){
if(obj.length !== reference.length) return false;
for(var i=0, len=obj.length; i<len; i++){
if(typeof obj[i] == "object" && typeof reference[j] == "object"){
if(!recursiveCompare(obj[i], reference[i])) return false;
}
else if(obj[i] !== reference[i]) return false;
}
}
else {
var objListCounter = 0;
var refListCounter = 0;
for(var i in obj){
objListCounter++;
if(typeof obj[i] == "object" && typeof reference[i] == "object"){
if(!recursiveCompare(obj[i], reference[i])) return false;
}
else if(obj[i] !== reference[i]) return false;
}
for(var i in reference) refListCounter++;
if(objListCounter !== refListCounter) return false;
}
return true; //Every object and array is equal
}
var arr1 = ['alcohol', 'soft', 'hot'],
arr2 = ['apple', 'pear'],
arr3 = ['soft', 'hot', 'alcohol'];
function isSame(a1, a2){
return !(a1.sort() > a2.sort() || a1.sort() < a2.sort());
}
console.log( isSame(arr1, arr2) ); //false
console.log( isSame(arr1, arr3) ); //true