在Javascript中用于不同的排序标准相同

时间:2017-01-25 11:07:25

标签: javascript

我正在尝试以下代码,但不确定为什么我为输出1和输出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

输出1和2与以下相同:

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"

在打印到控制台之前是否正在执行排序功能?有人可以详细解释。

1 个答案:

答案 0 :(得分:1)

您的两个控制台日志都使用相同的变量nameArray,它似乎指向相同的内存地址,或者由于浏览器控制台。

为了解决这个问题,您可以将对象克隆到另一个变量中:

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