javascript - Javascript 中不同排序标准的相同输出

标签 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"

这两个排序函数都是在打印到控制台之前执行的吗?谁能详细解释一下。

最佳答案

您的两个控制台日志都使用相同的变量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

关于javascript - Javascript 中不同排序标准的相同输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41850000/

相关文章:

javascript - 处理 JavaScript 中两层之间的错误

Javascript从数组中选择一个随机对象集

javascript - Fabric.js 拖动事件不起作用

javascript - 模型 Laravel 和 Vue 上的自定义方法

javascript - 为什么数据会在指令之外更改?

javascript - 无法在 react 中将 Prop 传递给子组件

javascript - jQuery Accordion 菜单中的某些元素滞后

javascript - 在 JavaScript 中向对象数组添加键

javascript - 获取 jquery 数据表中选中复选框的行 ID?

javascript - 我无法在本地计算机上运行 D3 代码