【问题标题】:How do I sort an array based on the attribute of corresponding elements of another array using Javascript?如何使用Javascript根据另一个数组的相应元素的属性对数组进行排序?
【发布时间】:2019-06-28 02:33:21
【问题描述】:

假设我有两个数组。一个是:

A = [a, b, c, d]

另一个是,

B = [w, x, y, z]

A中的每个元素对应B中的相应元素

(i.e. a -> w, b -> x, c -> y, d -> z)

现在我想按 B 元素的属性(比如值)的升序对数组 A 进行排序

(eg. w.value = 3, x.value = 2, y.value = 1, z.value = 4)

因此,我想要的输出是:

[c, b, a, d]

如何使用 Javascript 执行此操作?任何帮助将不胜感激。我被困了很长时间。

【问题讨论】:

  • 我已经用我想要的输出更新了问题。

标签: javascript arrays


【解决方案1】:

您可以获取索引,使用b 的值对它们进行排序,并通过排序索引映射a 的值。

var a = ['a', 'b', 'c', 'd'] ,
    b = [3, 2, 1, 4],
    indices = [...b.keys()].sort((x, y) => b[x] - b[y]),
    result = indices.map(i => a[i]);

console.log(result);

【讨论】:

  • 感谢您的回复。你能解释一下 [...b.keys()] 是什么意思吗?
  • @Borg1903:生成索引数组[0, 1, 2, ..., b.length-1]是个技巧;请参阅stackoverflow.com/questions/3895478/… 了解更多信息。
  • b.keys() 返回 b 的索引。 b 可以被认为是 {1:3, 2:2, 3:1, 4:4} - 所以(s)他根据它的值对 b 进行排序。这导致 b 为 {3:1, 2:2, 1:3, 4:4}。然后(s)他使用 a 映射 b 值。
  • 获取数组的键。 keys 是一个迭代器,要获得一个数组,它需要传播到一个数组中。
  • 非常感谢大家!明白了。
【解决方案2】:

要达到预期的结果,请使用以下使用 indexOf 和排序的选项

  1. 排序数组 - a 使用排序,b 数组值使用 indexOf

var a = ["a", "b", "c", "d"]
var b = [3, 2, 1, 4]

console.log(a.sort((x,y) => b[a.indexOf(x)] - b[a.indexOf(y)]))

【讨论】:

  • 谢谢。我猜这会比 Nina Scholz 的答案更快的执行时间?
猜你喜欢
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多