关于数组排序的问题。

var arr_1 = ["2017-02-05", "2017-02-06", "2017-02-04", "2017-01-31", "2017-02-01", "2017-02-02", "2017-02-03"]

var arr_2 =["142146.00", "93380.03", "49825.00", "90437.00", "69174.00", "73603.00", "76662.00"]

arr_1 = arr_1.sort();

arr_1为["2017-01-31", "2017-02-01", "2017-02-02", "2017-02-03", "2017-02-04","2017-02-05", "2017-02-06"]

此时arr_1会按照正确日期来排序,请问arr_2 如何根据arr_1的的顺序来排序?

阅读 2.9k
5 个回答

arr_2.sort() 从小到大排序

第一步需要将两个数组的值对应起来,可以使用JSON对象,key值为时间,value值为金钱

var obj = {};
arr_1.forEach((ele, index) => obj[ele] = arr_2[index])

得到对象类似于{"2017-02-05": "142146.00"...}这样
然后再对 arr_1排序,使用map从对象中返回对应的值就是排好序的了

var arr_2 = arr_1.sort().map(ele => obj[ele])

有对应关系的时候建议优先考虑对象:obj={arr1:arr2} 排序后就可以直接匹配了。当然这种方法比较蠢,但是更容易理解~

用快排在排序赋值的过程中多操作一下这个数组就行了。

我的思路是自己实现一个排序算法,给arr_1排序的同时带上arr_2就行了。
下边用的是冒泡:

function uSwap(arr, q1, q2) {
    var temp = arr[q1];
    arr[q1] = arr[q2];
    arr[q2] = temp;
}

function arrSort(arr1, arr2) {
    var len = arr1.length;
    var i,j,ending;
    
    for (i = 0; i < len - 1; i++) {
        for (j = 0, ending = len - 1 - i; j < ending; j++) {
            if (arr1[j] > arr1[j + 1]) {
                uSwap(arr1, j, j + 1);
                uSwap(arr2, j, j + 1);
            }
        }
    }
}

var arr_1 = [
    '2017-02-05',
    '2017-02-06',
    '2017-02-04',
    '2017-01-31',
    '2017-02-01',
    '2017-02-02',
    '2017-02-03'
];

var arr_2 = [
    '142146.00',
    '93380.03',
    '49825.00',
    '90437.00',
    '69174.00',
    '73603.00',
    '76662.00'
];

arrSort(arr_1, arr_2);

console.log(arr_1);
console.log(arr_2);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题