【问题标题】:Can someone explain in detail how mapping this array works step by step有人可以详细解释一下这个数组是如何一步一步地映射的吗
【发布时间】:2020-04-14 03:12:38
【问题描述】:

原始数组:[ [3, 5], [9, 6], [3,1] ]

1) 使每个迷你数组中的第一个数字为较小的数字,每个迷你数组中的第二个数字为较大的数字 - [ [3, 5], [9, 6], [3,1] ] -> [[ 3,5], [6,9], [1,3]]

2) 按第一个数字对迷你数组进行排序。 - [ [3,5], [6,9], [1,3] ] -> [ [1,3], [3,5], [6,9] ]

所以 [ [3, 5], [9, 6], [3,1] ] -> [ [1,3], [3,5], [6,9] ] 排序结束转型。

有人可以逐步详细、清晰、简洁地解释如何使用 array.map() 来实现这一点吗?

【问题讨论】:

    标签: arrays sorting dictionary


    【解决方案1】:

    使用map使nested arraynumbers按升序排列,然后在嵌套数组中根据first number应用sort

    const arr = [
      [3, 5],
      [9, 6],
      [3, 1]
    ];
    
    const sortedArr = arr
        .map(([num1, num2]) => num2 < num1 ? [num2, num1] : [num1, num2])
        .sort(([arr1num1], [arr2num1]) => arr1num1 - arr2num1);
    
    console.log(sortedArr);

    -- 编辑--

    地图结果

    [[3, 5], [6, 9], [1, 3]];
    

    在排序函数中,我正在执行数组解构(参见 - https://javascript.info/destructuring-assignment)。基本上,我只是从数组中提取第一个元素并存储在单独的变量中。在我们的例子中,arr1num1arr2num1

    例子-

    const arr = [3, 5];
    
    // Extracting the first element from array and saving in variable - arr1num1. 
    // I do not need second array element 5, so i did not extracted the second array element
    const [arr1num1] = arr; // arr1num1 will have now value 3
    console.log(arr1num1);
    
    // If second array element is also required, then the above statement will become const [num1, num2]  = arr; where num1 -> 3 and num2 ->5

    上面的替代方案是使用那里的索引直接访问数组元素。

    const arr = [
        [3, 5],
        [9, 6],
        [3, 1]
     ];
      
     const sortedArr = arr
          .map(([num1, num2]) => num2 < num1 ? [num2, num1] : [num1, num2])
          .sort((arr1, arr2) => arr1[0] - arr2[0]);
      
    console.log(sortedArr);

    要了解有关排序的更多信息,请参阅 - Sorting

    排序的工作原理,

    在第一次迭代中,[3, 5] 和 [6, 9] 的交换将根据排序条件发生。

    arr1num1 -> 3
    arr2num1 -> 6
    

    语句arr1num1 - arr2num1 将检查3 是否大于6。如果是,它将交换数组 [3, 5] 和 [6, 9]。因为 3 不大于 9,所以不会发生交换。

    第二次迭代,[6, 9] 和 [1, 3] 将根据条件进行交换。

    arr1num1 -> 6
    arr1num2 -> 1
    

    由于 6 > 比 1,将发生交换。

    Before Swapping array will be- `[[3, 5], [6, 9], [1, 3]]`;
    After Swapping array will be - `[[3, 5], [1, 3], [6, 9]]`;
    

    这个过程将继续,直到你的数组被排序。

    【讨论】:

    • 我想给你一个接受,但我仍然想理解这一点:关于代码的 .sort 部分如何应用于这个数组数组的书面示例是什么?
    • 不需要是 arr1[num1], arr2[num1] 吗?因为 arr1num1 代表 [3, 5] 是吗?而 arr2num1 代表 [6, 9] 是吗?还是arr1num1代表3,arr2num1代表6?如果 arr1num 和 arr2num1 只表示嵌套数组中的第一个数字,那么 sort 如何正确排序整个嵌套数组
    • @AlexanderRostad - 我已经编辑了我的答案。请检查。抱歉延迟重播,我正忙于其他事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多