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

时间:2019-07-09 17:48:39

标签: javascript arrays object

我有两个数组:

let arrayValues = [["20", "."], ["42", "."], ["44", "."], ["6", "."], ["5", "."]]
let arrayIndex = [4,5,1,2,3]

我遇到一个问题:

我想根据索引Array-的编号对 values 数组进行排序(请注意,第一个元素已连接到第一个元素,第二个到第二个,依此类推)-这样,最大的数字就排在第一位,第二个是第二个,依此类推。该顺序需要转换为第一个数组。

结果应为:

let result = ["42", "."], ["20", "."], ["5", "."], ["6", "."], ["44", "."]]

由于新订单

= [5,4,3,2,1]

我现在的问题涉及一个非常特殊的问题-但是我不知道如何开始tbh。

任何帮助将不胜感激。

这里是我的python代码:

arrayValues = (("20", "."), ("42", "."), ("44", "."), ("6", "."), ("5", "."))
arrayIndex = (4,5,1,2,3)
result = sorted(range(len(arrayValues)), key=lambda i:arrayIndex[i],reverse=0)

2 个答案:

答案 0 :(得分:1)

您可以获取索引,通过该索引上的值对它们进行排序,然后以新的顺序映射这些值。

var values = [["20", "."], ["42", "."], ["44", "."], ["6", "."], ["5", "."]],
    order = [4, 5, 1, 2, 3],
    result = [...order.keys()]
        .sort((a, b) => order[b] - order[a])
        .map(i => values[i]);

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

答案 1 :(得分:0)

您可以只获取索引:

  const result = [];

  for(let i = 0; i < arrayValues.length && i < arrayIndex.length; i++)
    result[ arrayIndex[i] - 1 ] = arrayValues[i];