I am having two arrays, how can i compare the two arrays at single shot.
var arr1= ["a","b","c"]; var arr2 = ["a","c","d"] if(arr1 == arr2){ console.log(true); }else{ console.log(false); } I am having two arrays, how can i compare the two arrays at single shot.
var arr1= ["a","b","c"]; var arr2 = ["a","c","d"] if(arr1 == arr2){ console.log(true); }else{ console.log(false); } var arr1 = ["a","b","c"]; var arr2 = ["a","c","d"]; if (arr1.length == arr2.length && arr1.every(function(u, i) { return u === arr2[i]; }) ) { console.log(true); } else { console.log(false); } Side note for edge cases:
=== is often considered slightly broken for this kind of task because NaN behaves unexpectedly:
var arr1 = ["a",NaN,"b"]; var arr2 = ["a",NaN,"b"]; if (arr1.length == arr2.length && arr1.every(function(u, i) { return u === arr2[i]; }) ) { console.log(true); } else { console.log(false); } The code above actually logs false because NaN !== NaN. In addition, === can't distinguish +0 from -0. To cover both of these cases, you could use a stronger comparison known as "egal" or "is", which can easily be implemented like so:
function is(a, b) { return a === b && (a !== 0 || 1 / a === 1 / b) // false for +0 vs -0 || a !== a && b !== b; // true for NaN vs NaN } var arr1 = ["a",NaN,"b"]; var arr2 = ["a",NaN,"b"]; if (arr1.length == arr2.length && arr1.every(function(u, i) { // Use "is" instead of "===" return is(u, arr2[i]); }) ) { console.log(true); } else { console.log(false); } var arr1 = [ 'a', 'b' ], arr2 = ['a','b','c']; Include a simple length comparison before the every, and you're done: if( arr1.length === arr2.length && arr1.every( ...[ES6]
Top answer is good & enough.
But when you just want to compare its values are same you have to sort it before. here's no need sort code.
if(arr1.length == arr2.length && arr1.every((v) => arr2.indexOf(v) >= 0)) { console.log(true); } else { console.log(false); } And.. I think using a 'some' instead of 'every' is better.
If those are not same, 'some' gives you a early exit. - very little early but early ;)
if(arr1.length == arr2.length && !arr1.some((v) => arr2.indexOf(v) < 0)) { console.log(true); } else { console.log(false); } I would make use of underscore for this.
var same = (_.difference(arr1, arr2).length == 0) _ = require('underscore'); _.difference(["a","c"], ["a","c","d"]).length; returns: 0 Same for lodash.The top answer is good, but I would also consider using Array.prototype:
Array.prototype.equals = function (arr) { return this.length == arr.length && this.every((u, i) => u === arr[i]); } console.log([1,2,3].equals([1,2,3])); // true console.log([1,2,3].equals([1,3,3])); // false // BUT! console.log(["a",NaN,"b"].equals(["a",NaN,"b"])); // false, because NaN !== NaN If you want it to work for NaNs too and distinguish +0 and -0, better use this:
Array.prototype.equals = function (arr) { function is(a, b) { // taken from the top answer return a === b && (a !== 0 || 1 / a === 1 / b) // false for +0 vs -0 || a !== a && b !== b; // true for NaN vs NaN } return this.length == arr.length && this.every((u, i) => is(u, arr[i])); } console.log(["a",NaN,"b"].equals(["a",NaN,"b"])); // true (Although the question is much older than v9.0.0, but) since the question is about Node - starting from Node v9.0.0 you can use the built-in "util" module's isDeepStrictEqual(arr1, arr2) for comparing arrays (or objects, or anything for that matter)
const util = require('util'); let arr1 = [1,2,3]; let arr2 = [1,2,3]; let arr3 = [1,3,2]; console.log(util.isDeepStrictEqual(arr1, arr2)) // true console.log(util.isDeepStrictEqual(arr1, arr3)) // false Also works for NaN
There is also a non-strict version of this: https://nodejs.org/api/assert.html#assertdeepequalactual-expected-message
I wanted to add some modification of the code made by 'Taihwan Hah' but could not leave a comment (the system told me so)
So here is my modifs:
function ArrayEquals(arr1,arr2){ return arr1.length === arr2.length && !arr1.some((v) => arr2.indexOf(v) < 0) && !arr2.some((v) => arr1.indexOf(v) < 0); } basically, I had to check for but array because my arrays do not contains unique numbers.