Я хочу, чтобы позиция массива была одинаковой, а значение тоже.
var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
Я пробовал вот так
var array3 = array1 === array2 // returns false
Я хочу, чтобы позиция массива была одинаковой, а значение тоже.
var array1 = [4,8,9,10];
var array2 = [4,8,9,10];
Я пробовал вот так
var array3 = array1 === array2 // returns false
Вы можете использовать Array.prototype.every(). (A polyfill необходим для 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];
});
Менее надежный подход, но он работает.
a = [2, 4, 5].toString();
b = [2, 4, 5].toString();
console.log(a===b);
var array3 = array1 === array2
Это будет сравнивать, являются ли array1 и array2 одним и тем же объектом массива в памяти, что не то, что вы хотите.
Чтобы сделать то, что вы хотите, вам нужно проверить, имеют ли два массива одинаковые длины, и, что каждый член в каждом индексе идентичен.
Предполагая, что ваш массив заполнен примитивами-числами или строками, что-то вроде этого должно делать
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;
}
Вы можете попробовать этот простой подход
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.');
}
Используйте 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 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));
}
Если вы сравниваете 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,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;
}
}
}
}
Попробуйте сделать так: 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;
}