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