javascript - 按值排序对象未按预期工作

标签 javascript arrays sorting

我正在尝试根据 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_partza_partparticipants 都引用内存中完全相同的数组。您正在使用升序转换该数组,然后立即使用降序对其重新排序。

使用 slice 创建数组的浅拷贝:

var az_part = participants.slice();
var za_part = participants.slice();

(“浅拷贝”我的意思是这将创建一个新列表,但它不会创建新对象。每个结果列表将不同——并且可以不同排序——但如果你改变任何对象在内部,例如 participants[2].notes = "foo",这将改变每个列表中存在的对象。)

关于javascript - 按值排序对象未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43641402/

相关文章:

C++ 'substitute' 用于具有灵活数组成员的结构

java - 存储和更新隐式信息(数组、Java)的性能损失

java - 如何检查 ArrayList<String> 是否包含字符串数组中的任何元素?

java - double 有理数的最快排序算法

ruby-on-rails - 你怎么知道一个数组是否有连续的相同元素?

javascript - 如何发出 jsonp 请求

javascript - 外部脚本文件未加载到meteorjs中

javascript - amCharts - 如何使用非英语日历?

javascript - for.in 的迭代顺序——不是通过插入(还有吗?)

java - 如何将一个JSP包含在另一个JSP中?