0

我有数字8939,然后我想获取数组[8000,7000,6000,5000,4000,3000,2000,1000]和示例,如果我有,340那么我可以获取数组300,200,100

我只知道,如果我用户

i = i/1000 * 1000

然后我可以将8939向下舍入到8000,但我不知道我怎样才能得到我想要的结果。

4

5 回答 5

3

没有理由让它复杂化,你可以使用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
于 2013-08-13T08:06:28.387 回答
2

以下将满足您的要求:

    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或调整<=对.whileMath.floor

于 2013-08-13T08:13:52.310 回答
2
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]
于 2013-08-13T08:16:35.963 回答
1
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]
于 2013-08-13T08:17:39.333 回答
1
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]

于 2013-08-15T05:37:16.853 回答