根据数字数组的第一个和最后一个值对数组进行排序

alanbuchanan

我有一个数字数组的数组。

每个数字数组始终是一个升序序列,例如[8, 9, 10]

我想基于以下内容对每个数字数组进行排序:

  1. 数组中的第一个(也是最低的)数字。
  2. 他们的范围。

例如,给出以下内容:

[
  [1],
  [2, 3],
  [10],
  [11, 12, 13],
  [3, 4],
  [2, 3, 4],
  [1, 2, 3, 4, 5, 6],
  [10, 11, 12],
  [7, 8, 9],
  [1, 2, 3],
  [10, 11],
]

结果应为:

[
  [1],
  [1, 2, 3],
  [1, 2, 3, 4, 5, 6],
  [2, 3],
  [2, 3, 4],
  [3, 4],
  [7, 8, 9],
  [10],
  [10, 11],
  [10, 11, 12],
  [11, 12, 13],
]

使用以下方法几乎可以达到结果:

arr.sort((a, b) => a[0] - b[0]);

但不完全是

这是我的示例代码:https : //repl.it/repls/MadeupMediumpurpleCavy

有没有一种方法可以使用Array.prototype.sort实现呢?

布莱恩·帕特森

当前,您的代码仅通过调用sort的compareFunction查看每个数组的第一个元素来对数组进行排序:

const actual = difficulties.sort((a, b) => a[0] - b[0])

如果第一个元素的值相等,例如:

[2, 3, 4]

[2, 3]

期望的结果是保持它们与当前的顺序相同,但不要!通过一些不稳定的时间过时的wimey ...东西...在某些情况下,如果结果语句解析为0,则会切换它们。据我所知,这些实例是不可预测的,可能与特定的浏览器无关。

因此,此时我们在此处使用的排序函数的已知结果如下:

a[0] - b[0] < 0: do nothing
a[0] - b[0] = 0: undef (maybe move maybe not)
a[0] - b[0] > 0: move element b to before element a

话虽如此,如果数组(a和b)的第一个元素相同,就需要对范围进行排序。幸运的是,在您的数据集中,范围直接对应于数组的长度,因此它使事情变得更简单。

提到逻辑运算符并不一定要与javascript中的布尔值一起使用是一个很好的观点。也可以使用整数!使用与布尔值不同的数据类型,结果可能会变得有些混乱,但这在此特定示例中很重要:

唯一的整数是0!所有非0整数都是真实的。

所以...

如果第一个值是true,则OR短路,这意味着在这种情况下,如果left语句解析为非0,则OR语句返回该非0整数,并且不会继续评估右语句。

考虑以下:

a[0] - b[0] || a.length - b.length

使用示例数组:

[1, 2, 3]

[2, 3]

结果值将是:

a[0] = 1
b[0] = 2

a[0] - b[0] = -1

因此:

a[0] - b[0] || a.length - b.length

解析为-1 || 没关系(1)

-1为非0,因此此OR语句将-1返回到sort函数,该函数将元素保留在原处。

相对于以下情况:

[2, 3, 4]

[2, 3]

结果值将是:

a[0] = 2
b[0] = 2

a[0] - b[0] = 0

因此:

a[0] - b[0] || a.length - b.length

解析为0 || 1个

该OR语句返回1,因为0为false,而1为true。

1是一个正数,对于排序功能而言(如上所述)意味着将元素b置于元素a之后。

试图尽可能详细。希望这可以帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据第一个值对数组进行排序?

根据第一个数组对数组进行排序

用Java中的第一个值对对数组进行排序

对数组进行排序,使给定值成为第一个

如何通过第一个子数组值对数组数组(2D数组)进行排序

如何根据解析的第一个数字对字符串数组进行排序

忽略数组中的第一个和最后一个数字

如何根据第一个或第二个中的较大值对成对数组进行排序

从数组获取第一个和最后一个值

提取json数组/对象的第一个和最后一个值

返回数组中的第一个和最后一个值

如何根据另一个数组的值对数组的值进行排序

Python:基于第一个元素对数组中的元组进行排序

如何根据php中嵌套数组的第一个值对多维数组进行排序?

根据字符串的最后一个单词对数组进行排序

查找数组中的第一个、最后一个和中间值。返回最大的一个

jQuery基于最后一个逗号后的数字对数组进行排序

根据另一个对象数组的属性值对数组进行排序

如何根据第一个值对数组求和和分组

根据数组的第一个元素对数组进行分组,而无需在Ruby中进行重复

根据第一个排序数组的索引对第二个数组进行排序

查找排序数组中元素的第一个和最后一个位置

获取可变深度数组中的第一个数字数组

如何根据数组的字符串元素的第一个字符在Javascript中对数组进行排序?-JavaScript

如何返回带有第一个和最后一个数字的数组?

python数组中None之间的第一个和最后一个数字

为什么我的代码只比较数组的第一个和最后一个数字 - Java

数组的第一个值

数组的第一个值作为键名,最后一个作为值JavaScript?