我有数字8939
,然后我想获取数组[8000,7000,6000,5000,4000,3000,2000,1000]
和示例,如果我有,340
那么我可以获取数组300,200,100
。
我只知道,如果我用户
i = i/1000 * 1000
然后我可以将8939向下舍入到8000,但我不知道我怎样才能得到我想要的结果。
我有数字8939
,然后我想获取数组[8000,7000,6000,5000,4000,3000,2000,1000]
和示例,如果我有,340
那么我可以获取数组300,200,100
。
我只知道,如果我用户
i = i/1000 * 1000
然后我可以将8939向下舍入到8000,但我不知道我怎样才能得到我想要的结果。
没有理由让它复杂化,你可以使用for
循环
function getArrForNum(num){
var arr = []; // create a new array
var digitNum = num.toString().length; //get the number of digits, can use Math.log instead
var mulOf10 = Math.pow(10,digitNum-1);
for(var i=1;i*mulOf10 < num;i++){
arr.push(i*mulOf10); // push the next multiple of 1000
}
return arr; //return it
}
然后你可以使用它:
getArrForNum(3211); //1000,2000,3000
getArrForNum(321); //100,200,300
这是一个仅用于挑战的单行版本,但我强烈建议避免使用它:)
Array(+(832+"")[0]).join(".").split(".").map(function(_,i){ return (i+1)*Math.pow(10,(832+"").length-1);}); // 800,700,600,500,400,300,200,100
Array(+(3332+"")[0]).join(".").split(".").map(function(_,i){ return (i+1)*Math.pow(10,(3332+"").length-1);}); //1000,2000,3000
以下将满足您的要求:
function getArray(value) {
var valueOrder = Math.floor( Math.log(value) / Math.log(10) );
var result = [];
var step = Math.pow (10, valueOrder);
var currentValue = step;
while (currentValue < value) {
result.push (currentValue);
currentValue += step;
}
return result.reverse();
}
在这里演示:http: //jsfiddle.net/5zXc5/
getArray(8939) => 8000,7000,6000,5000,4000,3000,2000,1000
getArray(340) => 300,200,100
您没有提到边缘情况(例如 1000),但是通过将 更改<
为 a或调整<=
对.while
Math.floor
function f(a) {
var len = a.toString().length,
m = Math.pow(10, len - 1),
e = a.toString().charAt(0),
num = e * m,
i = 1
out = [];
for (i = 0; i < e; i++) {
out.push(num - i * m);
}
return out;
}
f(8939); // [8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000]
f(340); // [300, 200, 100]
f(0); // []
f(10); // [10]
f(20); // [20, 10]
f(70); // [70, 60, 50, 40, 30, 20, 10]
function g(n){
var p = Math.floor(Math.log(n)/Math.log(10)), // n.toString().length - 1 is cool (in others' answers).
m = Math.pow(10,p),
d = Math.floor(n/m),
r = [];
for(; d>0; d--){
r.push(d*m);
}
return r;
}
g(8939); // [8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000]
function mine(num){
var result =[];
var count = 0;
var i = num;
var f;
while(i!=0){
i = Math.floor(i/10);
count++;
}
f = Math.floor(num/Math.pow(10,count-1));
for(i =f;i>=1 && count>1;i--){
result.push(i*Math.pow(10,count-1));
}
return result;
}
我的(8939);// [8000, 7000, 6000, 5000, 4000, 3000, 2000, 1000]
我的(340); // [300, 200, 100]
我的 (0); // []
我的 (10); // [10]
我的 (20); // [20, 10]
我的 (70); // [70, 60, 50, 40, 30, 20, 10]