【问题标题】:Sort an array of strings based on an array of numbers根据数字数组对字符串数组进行排序
【发布时间】:2020-02-21 11:30:03
【问题描述】:


我正在尝试执行以下操作:根据长度相等的数字数组对字符串数组进行排序。例如:

A=[a,b,c,d,e]
B=[1,3,2,5,4]

A'=[a,c,b,e,d] //<=The desired outcome

基本上,我正在考虑基于将数组 B 排序为升序对数组 A 进行排序。在这里,我正在考虑隐式值对,就像对象一样。

我可以考虑创建一个对象,对其进行排序,然后分离出字符串数组,但这可能代码太多,我想知道是否有更简单的方法来实现这一点。
欢迎任何建议。非常感谢你!

【问题讨论】:

  • "...创建一个对象,对其进行排序,..." - 你不能“排序”一个对象。
  • 试试这个A.map((x,y)=&gt;{return {"string":x,"number":B[y]}}).sort((x,y)=&gt;x.number-y.number).map(x=&gt;x.string)

标签: javascript arrays sorting


【解决方案1】:

您无需在此处进行任何排序。
只需将数字用作“位置”,从何处获取结果中当前索引/位置的值。

const input = ["a", "b", "c", "d", "e"];
const order = [1, 3, 2, 5, 4];

const result = order.map(position => input[position - 1]);

console.log(result);

【讨论】:

  • 太棒了,我真的没想到这个
【解决方案2】:

一点代码高尔夫:

const A=['a','b','c','d','e'];
const B=[1,3,2,5,4];

// for this to work, we have to assume A and B have the same length
// if you implement this into a function, do such a check yourself first

const sorted = A.map((item, index, arr) => arr[B[index] - 1]);
console.log(sorted);

只要 B 至少和 A 一样长,并且如果 B 充满数字,这将起作用

【讨论】:

    【解决方案3】:

    如果你想有一个自定义的顺序,那么你可以创建一个带有顺序的对象:

    let a = ['a', 'b', 'c', 'd', 'e'];
    let b = [1, 3, 2, 5, 4];
    
    let order = {a: 1, b: 3, c:2, d: 5, e:4};
    
    const result =  a.sort((a, b) => order[a] - order[b]);
    console.log(result);

    【讨论】:

      【解决方案4】:

      您可以使用 for 循环并从 A 中添加值,从 B 中获取索引。

      let A = ["a", "b", "c", "d", "e"];
      let B = [1, 3, 2, 5, 4];
      let C = [];
      
      for (let i = 0; i < A.length; i++) C[B[i] - 1] = A[i];
      
      console.log(C);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-08-17
        • 2016-10-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-23
        • 2021-12-26
        相关资源
        最近更新 更多