我想要數組的位置也是一樣的,值也一樣。如何使用Javascript比較兩個數組是否相等?
var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
我試過這樣
var array3 = array1 === array2 // returns false
我想要數組的位置也是一樣的,值也一樣。如何使用Javascript比較兩個數組是否相等?
var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
我試過這樣
var array3 = array1 === array2 // returns false
你可以使用Array.prototype.every()。(需要對IE < 9等老牌瀏覽器一個填充工具)
var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
var is_same = (array1.length == array2.length) && array1.every(function(element, index) {
return element === array2[index];
});
我可以用這個嗎?它也可以正常工作。 –
這個答案也在這裏找到:http://stackoverflow.com/a/19746771。並注意它只適用於淺等於(這對於OP給出的例子來說是完全正確的)。 –
只有一點改進:'(array1.length === array2.length)'。 '==='而不是'=='。 – lwozniak
var array3 = array1 === array2
這將比較數組1和數組2是否在內存中同一數組對象,這是不是你想要的。
爲了做到你想要的,你需要檢查兩個數組是否具有相同的長度,和每個索引中的每個成員是相同的。
假設你的數組充滿了原語號碼和或字符串,這樣的事情應該做
function arraysAreIdentical(arr1, arr2){
if (arr1.length !== arr2.length) return false;
for (var i = 0, len = arr1.length; i < len; i++){
if (arr1[i] !== arr2[i]){
return false;
}
}
return true;
}
這裏是一個小提琴玩(相同的答案,不同的方式來迭代):http://jsfiddle.net/jimschubert/85M4z/ –
多維數組版本可在這裏:http://stackoverflow.com/questions/7837456/comparing-two-arrays-in-javascript –
嘗試做這樣的:array1.compare(array2)=true
Array.prototype.compare = function (array) {
// if the other array is a falsy value, return
if (!array)
return false;
// compare lengths - can save a lot of time
if (this.length != array.length)
return false;
for (var i = 0, l=this.length; i < l; i++) {
// Check if we have nested arrays
if (this[i] instanceof Array && array[i] instanceof Array) {
// recurse into the nested arrays
if (!this[i].compare(array[i]))
return false;
}
else if (this[i] != array[i]) {
// Warning - two different object instances will never be equal: {x:20} != {x:20}
return false;
}
}
return true;
}
這裏的經驗法則並不是要混淆你不擁有的物體。 'Array.prototype'是一個內置的數組類型的原型對象,這會在團隊中工作時造成不一致。 –
如果在同一個索引比較2個數組,但值沒有,那麼試試這個
var array1=[1,2,3,4]
var array2=[1,4,3,2]
var is_equal = array1.length==array2.length && array1.every(function(v,i) { return ($.inArray(v,array2) != -1)})
console.log(is_equal)
你可以試試這個簡單的方法
var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
console.log(array1.join('|'));
console.log(array2.join('|'));
if (array1.join('|') === array2.join('|')) {
\t console.log('The arrays are equal.');
} else {
\t console.log('The arrays are NOT equal.');
}
array1 = [[1,2],[3,4],[5,6],[7,8]];
array2 = [[1,2],[3,4],[5,6],[7,8]];
console.log(array1.join('|'));
console.log(array2.join('|'));
if (array1.join('|') === array2.join('|')) {
\t console.log('The arrays are equal.');
} else {
\t console.log('The arrays are NOT equal.');
}
如果值的位置不重要,可以先對數組進行排序。
if (array1.sort().join('|') === array2.sort().join('|')) {
console.log('The arrays are equal.');
} else {
console.log('The arrays are NOT equal.');
}
原來的問題表明,職位和價值必須相同。如果位置不重要,那麼你可以先對兩個數組進行排序。 –
不太穩健的方法,但它的工作原理。
a = [2, 4, 5].toString();
b = [2, 4, 5].toString();
console.log(a===b);
如果數組元素的順序不同,該怎麼辦?這不起作用 – fenec
如果你知道數組是在相同的順序(如我),完美的作品。然而,你可以用sort()排序數組元素,然後這應該解決操作的問題。 –
如果a ='[2,4,5] .toString()' 和b ='[「2,4」,5] .toString()',這種方法給出了錯誤的答案。 –
這是代碼。它能夠比較任何位置的數組。
var array1 = [4,8,10,9];
var array2 = [10,8,9,4];
var is_same = array1.length == array2.length && array1.every(function(element, index) {
//return element === array2[index];
if(array2.indexOf(element)>-1){
return element = array2[array2.indexOf(element)];
}
});
console.log(is_same);
謝謝!我正在使用這個!我很欣賞這是如何簡潔的 – williamle8300
上面的代碼在很多情況下更有用。我正在使用我自己。 – Zia
一個更現代的版本:
function arraysEqual(a, b) {
a = Array.isArray(a) ? a : [];
b = Array.isArray(b) ? b : [];
return a.length === b.length && a.every((el, ix) => el === b[ix]);
}
強制轉換非陣列參數空數組從爆炸停止a.every()
。
如果你只是想看看,如果陣列具有相同的一組元素,那麼你可以使用Array.includes()
:
function arraysContainSame(a, b) {
a = Array.isArray(a) ? a : [];
b = Array.isArray(b) ? b : [];
return a.length === b.length && a.every(el => b.includes(el));
}
不幸的是,這給出了誤報。例如:'arraysEqual(23,「」)' –
這是故意的。 *不是數組* * *不是數組* –
我認爲'arrayEqual'是否應該被允許接收非數組輸入是值得商榷的。也就是說,瞭解上述「陷阱」還是很好的。 –
使用lodash。 在ES6語法:
import isEqual from 'lodash/isEqual';
let equal = isEqual([1,2], [1,2]); // true
或以前版本的JS:
var isEqual = require('lodash/isEqual');
var equal = isEqual([1,2], [1,2]); // true
function isEqual(a) {
if (arrayData.length > 0) {
for (var i in arrayData) {
if (JSON.stringify(arrayData[i]) === JSON.stringify(a)) {
alert("Ya existe un registro con esta informacion");
return false;
}
}
}
}
http://stackoverflow.com/questions/1773069/using-jquery-to-compare -two-arrays – xdazz
以上是命令無關,OP請求有序保存。 – DrLivingston
我認爲這實際上是http://stackoverflow.com/questions/7837456的一個騙局。 –