我正在尝试根据 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;
});
最佳答案
所有三个变量 az_part
、za_part
和 participants
都引用内存中完全相同的数组。您正在使用升序转换该数组,然后立即使用降序对其重新排序。
使用 slice
创建数组的浅拷贝:
var az_part = participants.slice();
var za_part = participants.slice();
(“浅拷贝”我的意思是这将创建一个新列表,但它不会创建新对象。每个结果列表将不同——并且可以不同排序——但如果你改变任何对象在内部,例如 participants[2].notes = "foo"
,这将改变每个列表中存在的对象。)
关于javascript - 按值排序对象未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43641402/