我正在尝试以下代码,但不确定为什么我为输出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"
在打印到控制台之前是否正在执行排序功能?有人可以详细解释。
答案 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