2

我正在尝试创建一个 JS 脚本来使用,分隔符格式化数字,但逻辑实现中出现了问题。

我正在改变arr1这里的价值观。

这是我这次使用的 JS 代码——

<script>
var arr1 = [1,2,3,4,5,6,7];
arr1.reverse();
var i = 1;
var tempArr = new Array();
for( i; i <= arr1.length ; i++ ) {
    if( i%3 == 0 ) {
        tempArr[i-1] = arr1[i-1];
        tempArr[i] = ',';
        i++;
    }
    else {
        tempArr[i-1] = arr1[i-1];
    }
}
console.log(tempArr.reverse().join(''));
</script>

预期输出 ``当前错误输出

1,234           =>  ,234 
12,345          =>  1,345
123,456         =>  ,12,456
1,234,567       =>  ,23,567

当我这次学习编码时,请让我知道我在片段中做错了什么(逻辑部分)。

4

4 回答 4

4

您完全忘记了添加原始数字和逗号:

var arr1 = [1,2,3,4,5,6,7].reverse()
  , tempArr = [];
for (var i = 0; ++i <= arr1.length;) {
    tempArr[i-1] = arr1[i-1];
    if (i % 3 === 0) tempArr[i] = arr1[i++] + ',';
}
console.log(tempArr.reverse().join(''));

更简洁的版本:

function addCommas(str) {
    str = (str + '').split('');
    for (var i = str.length - 1; (i -= 3) > 0;) str[i] += ',';
    return str.join('');
}
于 2013-05-21T06:14:04.773 回答
3

这是一个快速复习,附注:

var arr1 = [1,2,3,4,5,6,7];
arr1.reverse();
var tempArr = [];
for( var i = 0, l = arr1.length; i < l ; i++ ) {
    if( i % 3 == 0 && i != 0) {
        tempArr.push(',');
    }
    tempArr.push(arr1[i]);
}
console.log(tempArr.reverse().join(''));

前几个调整只是为了速度——在“for”循环中,不要在每次迭代时比较数组长度。当您这样做时,某些浏览器的性能极差,因为它们会在您每次检查时重新计算长度。此外,由于 JS 数组是零索引的,因此如果您也从零索引处开始循环,则不会那么混乱。使用构造数组new Array比仅使用数组字面量 (the []) 慢。

接下来的一些调整只是简化了您的代码。如果数字是 % 3,并且它不是第一个循环,请输入逗号。在任何一种情况下,添加由该迭代表示的数字。

让我知道这是否有意义。

于 2013-05-21T06:18:44.730 回答
3

您只是忘记将 arr1[i] 附加到 ','

<script>
var arr1 = [1,2,3,4,5,6,7];
arr1.reverse();
var i = 1;
var tempArr = new Array();
for( i; i <= arr1.length ; i++ ) {
    if( i%3 == 0 ) {
        tempArr[i-1] = arr1[i-1];
        tempArr[i] = arr1[i] + ',';
        i++;
    }
    else {
        tempArr[i-1] = arr1[i-1];
    }
}
console.log(tempArr.reverse().join(''));
</script>

无论如何,我认为最好从 0 开始数 'i'

于 2013-05-21T06:23:18.240 回答
2

更新发现另一个更短的版本

var a = [1,2,3,4,5,6,7], b, r = [];

while( (b = a.splice(-3)).length > 0 ) {
    r.push( b.reverse().join('') );
}

console.log( r.reverse().join() );

旧答案

我试图用whileloop 产生结果。

var orgArray = [1,2,3,4,5,6,7 ],
    ar = orgArray.slice(0).reverse(), // slice(0) to duplicate an array
    temp = [] ;

while ( ar.length != 0 ){

    temp.push( ar.pop() ); 

    if (  ar.length && ( ar.length %3 == 0 )  ) {
        temp.push( ',' );
    }        

}

console.log(  temp.join('') );

reduce使用 JavaScript 1.8 数组方法怎么样

var orgArray = [1,2,3,4,5,6,7];

var temp2 = orgArray.reverse().reduce( function( o,n,i  ){

    if ( i && i%3 == 0 ){
        o.push(',');
    };

    return o.push(n) && o;

},[]);

console.log( temp2.reverse().join('') );

两者都返回相同的结果..

于 2013-05-21T07:04:39.153 回答