Sort one array the same way as another array JavaScript

后端 未结 4 1072
日久生厌
日久生厌 2021-01-12 16:42

I have 2 arrays:

[2, 4, -2, 4, 1, 3]
[\"a\", \"b\", \"c\", \"d\", \"e\", \"f\"]

and I want them to be sorted by the numerical array:

<
相关标签:
4条回答
  • 2021-01-12 17:22

    You can do this in a single line by associating your two arrays and then ordering the items:

    const x = ["a", "b", "c", "d", "e", "f"]   
    const y = [2, 4, -2, 4, 1, 3]
    
    const result = y.map((val, index)=>({x:x[index], y:val})).sort((a,b)=>a.y-b.y).map(v=>v.x)
    
    // -> ["c", "e", "a", "f", "b", "d"]
    
    0 讨论(0)
  • 2021-01-12 17:36

    I would recommend storing the entire thing in a Map. That way, you can independently sort the first array however you want and then use those values as keys to call respective value of second array.

    0 讨论(0)
  • 2021-01-12 17:38

    You could sort the keys of the first array based on their value. This will return an array with indices of the array sorted based on the value of numbers array. Then use map to get the sorted values based on the indices

    const numbers = [2, 4, -2, 4, 1, 3],
          alphabets = ["a", "b", "c", "d", "e", "f"]
    
    const keys = Array.from(numbers.keys()).sort((a, b) => numbers[a] - numbers[b])
    
    const sortedNumbers = keys.map(i => numbers[i]),
          sortedAlphabets = keys.map(i => alphabets[i])
    
    console.log(
      sortedNumbers,
      sortedAlphabets
    )

    0 讨论(0)
  • 2021-01-12 17:45

    A standard method is to take the indices of the key array for sorting and sort the indices as pattern for all other arrays by taking the index and the value from the key array.

    At the end map the sorted arrays.

    var array1 = [2, 4, -2, 4, 1, 3],
        array2 = ["a", "b", "c", "d", "e", "f"],
        indices = [...array1.keys()].sort((a, b) => array1[a] - array1[b]);
    
    [array1, array2] = [array1, array2].map(a => indices.map(i => a[i]));
    
    console.log(...array1);
    console.log(...array2);

    0 讨论(0)
提交回复
热议问题