我正在尝试使用,
分隔符创建一个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
请告诉我这段时间内我做错了什么(逻辑部分),因为我这次正在学习编码。
答案 0 :(得分: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('');
}
答案 1 :(得分: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
构造数组比仅使用数组文字([]
)要慢。
接下来的一些调整只是简化了你的代码。如果数字是%3,并且它不是第一个循环,请输入逗号。在任何一种情况下,添加该迭代所代表的数字。
如果这有意义,请告诉我。
答案 2 :(得分: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'
答案 3 :(得分: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() );
旧答案
我尝试使用while
循环生成结果。
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('') );
如何使用JavaScript 1.8数组reduce
方法
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('') );
两者都返回相同的结果..