刷题的时候刷到了返回参数数字的千分位分隔符字符串的题目
题目:返回参数数字的千分位分隔符字符串
输入:12345
输出:12,345
输入:1234567
输出:1,234,567
(很抓马,我的脑袋空空)
目前思路如下:
1.将数字转成数组
2.按长度3以末尾为始分割成新的数组
3.以“,”连接新的数组
4.将新数组转成字符串输出
进行到第二步时,本想凭自己的大脑写出来,结果emm
好的 参考来了
最后不足len长度的也以一个数组存储,原文👇
js拆分数组(将一个数组以len长度分割,最后不足len长度的也以一个数组存储)_云风xe的博客-CSDN博客
/* 按指定长度切割数组 */
function split_array(arr,len){
for(let i =0;i<arr.length;i+=len){
ret.push(arr.slice(i,i+len))
}
}
跟着博主敲了一下,接下来引申一下从数组末尾开始以len长度分割,头不足len的也以一个数组存储;
怎么说,觉得应该会很容易,但,没直接改出来,报错了,写了一个费劲的👇
实现:从尾按长度切割数组
思路:1.确定能切割点索引
2.使用slice按段取出
代码:
function _splitArr(arr,len){
// 保存切割点索引
let arrcutIndex = []
for(let i = arr.length;i>0;i-=len){
arrcutIndex.push(i)
}
arrcutIndex.reverse()
let ret = []
arrcutIndex.reduce((pre,cur,index)=>{
ret.push(arr.slice(pre,cur))
return cur
},0)
return ret
}
_splitArr([1,2,3,4,5,6,7],3)
还有问题,就不做严谨讨论了,想要做出题目那样,需要将小数组使用jion方法,接连jion();
完整代码如下:
function _cut(incoming,len){
let arr
if(incoming>=0){
arr = incoming.toString().split('')
return split_array_tail(arr,len)
}else{
arr = Math.abs(incoming).toString().split('')
return '-'+split_array_tail(arr,len)
}
// let arr = incoming.toString().split('') 没考虑到0和负数
let ret = []
function split_array_tail(arr,len){
let ret = []
let temparr = []
for(i = arr.length;i>0;i-=len){
temparr.push(i)
}
temparr.reverse()
temparr.reduce((pre,cur,index)=>{
console.log(pre,cur,index)
ret.push(arr.slice(pre,cur).join(''))
return cur
},0)
return ret.join(',')
}
}
_cut(1234567,3)
以上 是我的思路,我要去提交了,如果不对,我就去借鉴通过人的脑子了