var array1 = [4,2];
var array2 = [1,3];
var concatArray = array1.concat(array2);
// iteration 1
concatArray_min = Math.min.apply(Math,concatArray);
var result = [concatArray_min];
var index = concatArray.indexOf(concatArray_min);
delete concatArray[index];
console.log(concatArray); // returns [4,2,3]
console.log(result); // returns [1]
// iteration 2
concatArray_min = Math.min.apply(Math,concatArray);
console.log(concatArray_min); // returns NaN
result.push(concatArray_min);
index = concatArray.indexOf(concatArray_min);
delete concatArray[index];
console.log(concatArray); // returns [4,2,3]
console.log(result); // returns [1,NaN]
我正在尝试合并两个数组,然后对它们进行排序。我首先连接数组,然后从未排序的连接数组中删除最小值,并将最小值推入结果数组。这首先起作用,但是第二次迭代失败,因为concatArray_min
显示为NaN
。问题可能是使用Math.min.apply.(Math,concatArray)
获取最小值并使用delete
删除元素?是否有替代方法而不使用.sort()?
答案 0 :(得分:1)
你问:
我正在尝试合并两个数组,然后对它们进行排序。如果不使用.sort()?
,是否有替代方法
首先,我将其构建在一个可重用的函数中。
其次让你的代码决定它何时完成迭代。
var array1 = [4,2], array2 = [1,3];
console.log( 'Result:', mergeSortUp(array1,array2) );
function mergeSortUp(a1, a2){
var mergeRes = a1.concat(a2), sortRes = mergeRes, completed = false;
while(!completed){
var didTakeAction = false;
for(var i in mergeRes)
if(sortRes[i-1] && mergeRes[i] < sortRes[i-1]){
var temp = sortRes[i-1]; sortRes[i-1] = mergeRes[i];sortRes[i]= temp;
didTakeAction = true;
}
if(!didTakeAction) completed = true;
}
return sortRes;
}