问题描述
假设我有两个数组:
arr1-[90,44,64,16,24,20,86,56,72,16]
和
arr2-[21,13,9,15,7,17,19,9]
我想对两个数组实现插入排序并接收排序后的结果数组:
[
90,21,7
]
我知道我可以通过以下方式间接实现:
resultArray = arr1.concat(arr2).sort(function(a,b) {return b - a});
对于在ES6中如何实现上述假设,我将不胜感激。
解决方法
您可以分别对数组进行排序,然后合并它们:
const sarr1 = arr1.sort((a,b) => b - a);
const sarr2 = arr2.sort((a,b) => b - a);
const tot = [];
let arr1i = 0;
let arr2i = 0;
while (arr1i < sarr1.length && arr2i < sarr2.length) {
if (sarr1[arr1i] >= sarr2[arr2i]) {
tot.push(sarr1[arr1i]);
arr1i++;
} else {
tot.push(sarr2[arr2i]);
arr2i++;
}
}
while (arr1i < sarr1.length) {
tot.push(sarr1[arr1i ++]);
}
while (arr2i < sarr2.length) {
tot.push(sarr2[arr2i ++]);
}
// tot now contains the fully sorted array
,
使用传播运算符进行连接,然后使用箭头函数进行排序:
let arr1 = [90,44,64,16,24,20,86,56,72,16];
let arr2 = [21,13,9,15,7,17,19,9];
let resultArray = [...arr1,...arr2].sort((a,b) => b - a);
console.log("arr1:");
console.log("["+arr1.join(",")+"]");
console.log("arr2:");
console.log("["+arr2.join(",")+"]");
console.log("resultArray:");
console.log("["+resultArray.join(",")+"]");
.as-console-wrapper { max-height: 100% !important; top: 0; }
测试更大的数组:
let arr1 = [90,9];
for(let i=0; i<10; i++) {
arr1 = arr1.concat(arr1);
arr2 = arr2.concat(arr2);
};
let start = null;
let resultArray = null;
start=new Date();
resultArray = [...arr1,b) => b - a);
console.log("First resultArray took " + (Date.now() - start) + "ms");
start = null;
resultArray = null;
start=new Date();
resultArray = arr1.concat(arr2).sort(function(a,b) {return b - a});
console.log("Second resultArray took " + (Date.now() - start) + "ms");
.as-console-wrapper { max-height: 100% !important; top: 0; }
好像let resultArray = [...arr1,b) => b - a);
花费的时间比resultArray = arr1.concat(arr2).sort(function(a,b) {return b - a});
花费的时间...