javascript - 在 Javascript 中使用 Math.min.apply() 获取数组的最小值会返回 NaN?

标签 javascript arrays merge

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/

相关文章:

javascript - jQuery 弹出窗口 (bPopup) 无法加载 iFrame

javascript - Safari 中的 HTML5 错误?使用本地文件时视频无法播放

arrays - R在列中搜索信息

arrays - Swift 设置为数组

javascript - 针对不同浏览器的 Javascript 代码的持续集成/测试

iphone - 如何在 NSArray 的 NSDictionary 中查找(而不是删除)重复项?

python - 合并两个元组的元组

r - R中的混合合并 - 下标解决方案?

从分支到生产

javascript - Ionic 4 D3 样式与 scss 类