【问题标题】:How can I sort the index of a nested array according to a specific key?如何根据特定键对嵌套数组的索引进行排序?
【发布时间】:2020-02-22 06:54:21
【问题描述】:

我有一个包含以下结构的嵌套数组:

arr: Array(2)
  0: [id: 1, area: 111, area_str: "111,00 m²"]
  1: [id: 2, area: 555, area_str: "555,00 m²"]

我正在尝试根据给定键及其对应值对整个嵌套数组进行排序。因此,例如,当提供的键是“区域”时,索引为 0 和 1 的嵌套项应根据通过比较给定键的值计算的排序结果作为一个整体重新排序。

参考此示例,所需的输出应如下所示:

arr: Array(2)
  0: [id: 2, area: 555, area_str: "555,00 m²"]
  1: [id: 1, area: 111, area_str: "111,00 m²"]

排序机制应该按升序和降序工作。我已经尝试使用 sort() 函数,但我只找到了对 ONE 数组中的键或值进行排序的示例,而不是通过更改索引位置来对嵌套子数组进行排序的示例。

如果您能给我一些关于如何实现这一目标的建议,我会很高兴。 提前致谢!

【问题讨论】:

  • 这看起来不像嵌套数组,而是一个对象数组(提示:area 不是数组的有效数字索引)

标签: javascript arrays sorting indexing key


【解决方案1】:

这里是一个如何对对象数组进行排序的小例子:

let array = [
  {id: 1, area: 555, area_str: "111,00 m²"},
  {id: 2, area: 111, area_str: "555,00 m²"},
  {id: 3, area: 333, area_str: "333,00 m²"}
]

function sortArray(array, property, isDescending) {
  if(isDescending) {
    array.sort((a,b) => (a[property] > b[property] ? -1 : 1 ));
  } else {
    array.sort((a,b) => (a[property] > b[property] ? 1 : -1 ));
  }
}

sortArray(array, 'id', true);
console.log(array);
sortArray(array, 'area', false);
console.log(array);

【讨论】:

  • 感谢您的建议。我的数组的创建是虚假的,这阻止了 sort 方法正确执行。我手动添加了索引级别,方法是创建具有相应索引的空对象,然后将数据添加到这些对象中,而不是使用本机 push 方法将表示另一个表行的另一个对象添加到数组中。更改给定数组的结构后,您提出的解决方案可以完美运行。
猜你喜欢
  • 1970-01-01
  • 2022-01-01
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2021-07-20
  • 2019-07-26
相关资源
最近更新 更多