【发布时间】:2020-06-22 07:30:30
【问题描述】:
我正在尝试编写一个函数decreasingOrder,它接受一个正整数作为输入,并以降序返回其数字的array。
例如,decreasingOrder(1234) 应该给 [4,3,2,1]。
function decreasingOrder(n) {
let unarr = [...`${n}`].map(i => parseInt(i)); //Unordered Array of Digits
let oarr = []; //Ordered Array of Digits
for(let j=0; j<unarr.length; j++){
let max = Math.max.apply(Math, unarr);
oarr.push(max);
unarr.splice(unarr.indexOf(max), 1); //delete element from array
}
return oarr;
}
console.log(decreasingOrder(1234));
//Expected [4,3,2,1], Instead got [4,3]
- 我认为,使用
splice方法删除元素也会减少数量 迭代次数。 - 我也尝试了
delete运算符,但得到了[4, NaN, NaN, NaN](因为Math.max([undefined]))。 - 当我尝试在
condition表达式中为for循环使用特定数字而不是unarr.length时,它工作正常!
所以当我使用splice 方法删除元素时,它会减少unarr.length,当我尝试使用delete 运算符保持unarr.length 不变时,它会给出NaN,我该怎么办?有没有其他方法可以写入相同的函数?我是 JavaScript 的初学者。
【问题讨论】:
-
如果使用的是数字,不妨把数字当作字符串处理。
-
您在使用
splice时应谨慎。它将从实际数组中删除元素。所以数组的长度会发生变化。
标签: javascript arrays core-js