【问题标题】:How to compare element in a nest array [duplicate]如何比较嵌套数组中的元素[重复]
【发布时间】:2019-08-05 22:21:34
【问题描述】:

我需要对嵌套数组中的元素进行排序。

每个嵌套数组有1个字符串和1个整数。

var arr1 = [["2000", 2], ["11", 2], ["11", 2], ["10003", 4], ["22", 4], ["123", 6], ["1234000", 10], ["44444444", 32], ["9999", 36]]

我需要通过升序整数(而不是字符串)来排序数组。我可以这样做:

var res = arr1.sort(function(a, b) {
    return a[1] - b[1];
});

但是,当 2 个整数具有相同的值时,我需要按它们的字符串对它们进行排序(仅适用于匹配的整数,而不适用于数组的其余部分)。

结果应该是:

[["11", 2], ["11", 2], ["2000", 2], ["10003", 4], ["22", 4], ["123", 6], ["1234000", 10], ["44444444", 32], ["9999", 36]]

我不知道如何做到这一点。我尝试了一个 for 循环,但一直出错。

有人帮我解决这个问题吗?

谢谢!

【问题讨论】:

  • 被骗的best answer实际上不是最上层的... TLDR:return a[1] - b[1] || a[0] - b[0]

标签: javascript arrays multidimensional-array nested


【解决方案1】:

您可以通过使用第一个索引进行排序来扩展排序。

顺便说一句,Array#sort,对数组in situ进行排序,这意味着数组改变了项目的顺序。

var array = [["2000", 2], ["11", 2], ["11", 2], ["10003", 4], ["22", 4]] ;

array.sort(function(a, b) {
    return a[1] - b[1] || a[0].localeCompare(b[0]);
});

console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 谢谢妮娜·肖尔茨!
  • 原来这个解决方案不起作用,因为它没有以相同的方式整理所有嵌套数组。这个数组: [["2000", 2], ["11", 2], ["11", 2], ["10003", 4], ["22", 4]] 应该是:[[" 11", 2], ["11", 2], ["2000", 2], ["22", 4], ["10003", 4]] 谢谢!
  • 什么不起作用?数组的嵌套程度如何?
  • 我刚刚更新了我的答案。对此感到抱歉。
  • 如果第二项相等,是否要按字符串排序?请参阅编辑。
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 2016-05-25
相关资源
最近更新 更多