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()?
最佳答案
通过使用delete
,您将从数组中删除一个元素,而不更新数组的长度,这会在数组中留下一个间隙,当您尝试访问它时,该间隙的计算结果为未定义。本质上,您试图将 min 应用于 [ 4, 2, undefined , 3 ]
。
您应该使用 Array.splice
删除目标元素相反:
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);
concatArray.splice(index,1);
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);
concatArray.splice(index,1);
console.log(concatArray); // returns [4,2,3]
console.log(result); // returns [1,2]
关于javascript - 在 Javascript 中使用 Math.min.apply() 获取数组的最小值会返回 NaN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24214837/