Come confrontare due array sono uguali usando Javascript?

Voglio che anche la posizione dell’array sia uguale e il valore sia lo stesso.

var array1 = [4,8,9,10]; var array2 = [4,8,9,10]; 

Ho provato così

 var array3 = array1 === array2 // returns false 

È ansible utilizzare Array.prototype.every () . ( È necessario un polyfill per IE <9 e altri browser precedenti ).

 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]; }); 

LA DEMO DI LAVORO.

Un approccio meno robusto, ma funziona.

 a = [2, 4, 5].toString(); b = [2, 4, 5].toString(); console.log(a===b); 
 var array3 = array1 === array2 

Questo confronterà se array1 e array2 sono lo stesso object array in memoria, che non è quello che vuoi.

Per fare ciò che vuoi, dovrai verificare se i due array hanno la stessa lunghezza e che ciascun membro di ciascun indice è identico.

Supponendo che il tuo array sia pieno di numeri primitivi – o stringhe – qualcosa come questo dovrebbe fare

 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; } 

Potresti provare questo approccio semplice

 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('|')) { console.log('The arrays are equal.'); } else { 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('|')) { console.log('The arrays are equal.'); } else { console.log('The arrays are NOT equal.'); } 

Una versione più moderna:

 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]); } 

La forzatura degli argomenti non-array per svuotare gli array impedisce a.every() di esplodere.

Se vuoi solo vedere se gli array hanno lo stesso insieme di elementi, puoi usare 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)); } 

Usa lodash. Nella syntax ES6:

 import isEqual from 'lodash/isEqual'; let equal = isEqual([1,2], [1,2]); // true 

O versioni precedenti di js:

 var isEqual = require('lodash/isEqual'); var equal = isEqual([1,2], [1,2]); // true 

Se si confrontano 2 array ma i valori non sono nello stesso indice, provare questo

 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) 

Ecco il codice. Che è in grado di confrontare gli array in base a qualsiasi posizione.

 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); 
 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; } } } } 

Controlla questo esempio

Prova a fare così: 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; }