web-dev-qa-db-fra.com

Comment comparer deux tableaux sont égaux avec Javascript?

Je veux que la position du tableau soit aussi identique et que la même valeur.

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

J'ai essayé comme ça

var array3 = array1 === array2   // returns false
37
Sudharsan S

Vous pouvez utiliser Array.prototype.every (). (Un polyfill est nécessaire pour IE <9 et d'autres anciens navigateurs.

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 DE TRAVAIL.

114
xdazz

Une approche moins robuste, mais ça marche.

a = [2, 4, 5].toString();
b = [2, 4, 5].toString();

console.log(a===b);
33
user2421180
var array3 = array1 === array2

Cela permettra de comparer si array1 et array2 sont le même objet array en mémoire, ce qui n'est pas ce que vous voulez. 

Afin de faire ce que vous voulez, vous devrez vérifier si les deux tableaux ont la même longueur, et que chaque membre de chaque index est identique. 

En supposant que votre tableau est rempli de primitives - nombres ou chaînes - quelque chose comme ceci devrait faire

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; 
}
10
Adam Rackis

Vous pouvez essayer cette approche simple

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

Si la position des valeurs n'est pas importante, vous pouvez d'abord trier les tableaux.

if (array1.sort().join('|') === array2.sort().join('|')) {
    console.log('The arrays are equal.');
} else {
    console.log('The arrays are NOT equal.');
}
4
Steve Bucknall

Une version plus moderne:

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

Le fait de forcer des arguments autres que des tableaux pour vider des tableaux arrête l'explosion de a.every().

Si vous voulez juste voir si les tableaux ont le même ensemble d'éléments, vous pouvez utiliser 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));
}
4
David G

Utilisez lodash . Dans la syntaxe ES6:

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

Ou versions précédentes de js:

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

Si vous comparez 2 tableaux mais que les valeurs ne sont pas dans le même index, essayez ceci

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

Consultez cet exemple

0
SPC ANGEL

Voici le code. Qui est capable de comparer des tableaux par n'importe quelle position. 

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);
0
Zia