['140200', '140300', '140400', '220300', '220400']
这样一个数组,有什么办法可以让14开头的拼接在一起,22开头的拼接在一起,可能还有其他很多6位数,怎么让6位数的前两个相同的拼接在一起,最后是这样
['140200,140300,140400', '220300,220400']
['140200', '140300', '140400', '220300', '220400']
这样一个数组,有什么办法可以让14开头的拼接在一起,22开头的拼接在一起,可能还有其他很多6位数,怎么让6位数的前两个相同的拼接在一起,最后是这样
['140200,140300,140400', '220300,220400']
var arr = ['140200', '140300', '140400', '220300', '220400'];
var arrGroup = arr.reduce((acc,cur)=>{
//(acc[cur.slice(0,2)]||=[]).push(cur);
if(!acc[cur.slice(0,2)]) acc[cur.slice(0,2)] =[];
acc[cur.slice(0,2)].push(cur);
return acc;
},{})
console.log(arrGroup)
Object.values(arrGroup).map(item=> item.toString());
// ['140200,140300,140400', '220300,220400']
既然都是 6 位数字组成的字符串,直接排序就是需要的结果(Array.prototype.sort()
本身就是按字符序排)
data.sort();
如果要按原来出现的顺序:(注意下例示例代码中 data
改了数据顺序的)
const data = ["140200", "220300", "140400", "140300", "220400"];
const r = data
.reduce(
(result, s) => {
const key = s.substring(0, 2);
const arr = result.find(([it]) => it.startsWith(key));
if (arr) {
arr.push(s);
} else {
result.push([s]);
}
return result;
},
[]
)
.flat();
console.log(r);
// [ '140200', '140400', '140300', '220300', '220400' ]
大佬都在玩手写的吗?我上个lodash的玩法吧。
const temp1 = _.groupBy( ['140200', '140300', '140400', '220300', '220400'], (str)=>str.slice(0,2));
Object.values(_.mapValues(temp1,item=>item.join()))
10 回答11.2k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答5.2k 阅读✓ 已解决
1 回答3.3k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决