我试图根据value.first_name对2个对象进行排序。一个升序字母顺序。另一个降序字母顺序。但是,他们都在排序下降。我究竟做错了什么?目标是根据first_name的值排列此数组中的对象。
var participants = [
{
id: "992543",
first_name: "",
last_name: "",
company: null,
notes: "",
registrationType: "",
alerts: [ ],
reg_scan: null
},
{
id: "999070",
first_name: "Tori",
last_name: "Fullard",
company: null,
notes: "",
registrationType: "Staff",
alerts: [ ],
reg_scan: null
},
{
id: "99265",
first_name: "Ronald",
last_name: "Brown",
company: null,
notes: "",
registrationType: "Dean's Guest",
alerts: [ ],
reg_scan: null
},
{
id: "992279",
first_name: "Laila",
last_name: "Shetty",
company: null,
notes: "",
registrationType: "Table Guest",
alerts: [
{
alert_id: "1",
dismissed: "0"
}
],
reg_scan: null
},
{
id: "992248",
first_name: "Paul",
last_name: "Keenan",
company: null,
notes: "",
registrationType: "Table Guest",
alerts: [ ],
reg_scan: null
}
];
var az_part = participants;
var za_part = participants;
az_part.sort(function(a, b) {
var nameA = a.first_name.toLowerCase();
var nameB = b.first_name.toLowerCase();
if (nameA > nameB) return 1;
if (nameA < nameB) return -1;
return 0;
});
za_part.sort(function(a, b) {
var nameA = a.first_name.toLowerCase();
var nameB = b.first_name.toLowerCase();
if (nameA > nameB) return -1;
if (nameA < nameB) return 1;
return 0;
});
答案 0 :(得分:3)
所有三个变量az_part
,za_part
和participants
都指向内存中完全相同的数组。您正在使用升序排序转换该数组,然后立即使用降序排序对其进行重新排序。
使用slice
创建数组的浅表副本:
var az_part = participants.slice();
var za_part = participants.slice();
(通过“浅拷贝”我的意思是这将创建一个新的列表,但它不会创建新的对象。每个结果列表将是不同的 - 并且可以进行不同的排序 - 但是如果你改变任何对象在内部,例如,participants[2].notes = "foo"
,它将改变每个列表中存在的对象。)
答案 1 :(得分:0)
JavaScript对象(包括数组)是对象的引用。所以你要对原始数组进行两次排序。
请查看此问题,以便对问题进行详细说明。
Why does changing an Array in JavaScript affect copies of the array?