0

I was trying out the below code but not sure why I am getting the same output for output 1 and output 2.

var nameArray = [{name : "Arindam",age: 26},{name: "Sumit",age:22},{name: "Arnab",age:35},{name: "Rajdeep",age:30}];

nameArray.sort(function(v1,v2){
    if(v1.name > v2.name){
        return -1;
    }else{
        return 1;
    }
});

console.dir(nameArray);//Output 1

nameArray.sort(function(v1,v2){
    if(v1.age < v2.age){
        return -1;
    }else{
        return 1;
    }
});

console.log("--------------");
console.dir(nameArray);//output 2

output 1 and 2 are same as below :

Array[4]
    0: Object
        age: 22
        name: "Sumit"
        __proto__: Object
    1: Object
        age: 26
        name: "Arindam"
        __proto__: Object
    2: Object
        age: 30
        name: "Rajdeep"
        __proto__: Object
    3: Object
        age: 35
        name: "Arnab"

Is it both the sort functions are getting executed before printing to console?Can anyone please explain in details.

Arindam
  • 185
  • 2
  • 14
  • 2
    Possible duplicate of [Is Chrome's JavaScript console lazy about evaluating arrays?](http://stackoverflow.com/questions/4057440/is-chromes-javascript-console-lazy-about-evaluating-arrays) – JJJ Jan 25 '17 at 11:09
  • Yey, try `console.dir(nameArray.slice());` – GOTO 0 Jan 25 '17 at 11:13
  • i get different output on edge, but your conparison does not look for same values. – Nina Scholz Jan 25 '17 at 11:13
  • Btw, what is expected output of first sorting? – sinisake Jan 25 '17 at 11:16
  • @sinisake { "name": "Sumit", "age": 22 }, { "name": "Rajdeep", "age": 30 }, { "name": "Arnab", "age": 35 }, { "name": "Arindam", "age": 26 } – Arindam Jan 25 '17 at 11:59

1 Answers1

1

Both of your console log are using the same variable nameArray which seems to point to the same memory address, or due to the browser console.

In order to solve this, you can clone your object into another variable:

var nameArray = [{
    name: "Arindam",
    age: 26
}, {
    name: "Sumit",
    age: 22
}, {
    name: "Arnab",
    age: 35
}, {
    name: "Rajdeep",
    age: 30
}];

nameArray.sort(function(v1, v2) {
    if (v1.name > v2.name) {
        return -1;
    } else {
        return 1;
    }
});

console.dir(nameArray); //Output 1

//Clone nameArray into nameArray2
nameArray2 = JSON.parse(JSON.stringify(nameArray));

nameArray2.sort(function(v1, v2) {
    if (v1.age < v2.age) {
        return -1;
    } else {
        return 1;
    }
});

console.log("--------------");
console.dir(nameArray2); //output 2
Magicprog.fr
  • 4,072
  • 4
  • 26
  • 35
  • Yes, the problem may be with the browser console. I just ran my original code replacing the console.dir(nameArray) with alert(JSON.stringify(nameArray)) and I am getting the desired output without cloning the old array into a new array. – Arindam Jan 25 '17 at 12:18