[{number:1},{number:2},{number:2}, {number:3},{number:3},{number:3}]
变为下面
[{number:1,index:'0'},{number:2,index:'1-2'},{number:3,index:'3-5'}]
如何处理?
[{number:1},{number:2},{number:2}, {number:3},{number:3},{number:3}]
变为下面
[{number:1,index:'0'},{number:2,index:'1-2'},{number:3,index:'3-5'}]
如何处理?
const data1 = [{number:1},{number:2},{number:2}, {number:3},{number:3},{number:3}]
function _collect(data, prefix) {
// 初始化
const dealMap = data.reduce((accMap, cur, curIndex) => {
const accMapKey = cur[prefix]
const accMapValue = accMap.get(accMapKey)
// set
accMap.set(accMapKey, accMap.has(accMapKey) ? [...accMapValue, curIndex].sort() : [curIndex])
return accMap
}, new Map())
// 遍历
return [...dealMap].map(([target, targetScope]) => {
const length = targetScope.length
const min = targetScope[0]
const max = targetScope[length - 1]
return {
[prefix]: target,
index: min === max ? String(min) : `${min}-${max}`
}
})
}
console.log(_collect(data1, 'number'))
function getArr(arr) {
let brr = arr.reduce((a, b, index) => {
let number = b.number, ln = a.lastNumber;
if (b.number === ln) {
let len = a.length, lo = a[len - 1], st = lo.index.split('-')[0];
a.splice(len - 1, 1, {number: b.number, index: `${st}-${index}`})
} else {
a.push({number: number, index: index + ''})
}
a.lastNumber = b.number;
return a;
}, [])
delete brr.lastNumber
return brr;
}
getArr([{number:1},{number:2},{number:2}, {number:3},{number:3},{number:3}])
先排序,后通过reduce处理数据,返回
{
number:1,
index:[]
}
结构,后续再转成自己想要的数据格式
(function(){
let org_array=[{number:1},{number:2},{number:2}, {number:3},{number:3},{number:3}];
function convert(orgArray){
return orgArray.sort((itemA,itemB)=>{
return itemA.number - itemB.number;
}).reduce((result,currentItem,index)=>{
let prevIndex = result.length-1;
let prev = result[prevIndex];
let prevNum=null;
if(prev){
prevNum = prev.number;
};
let currentNum = currentItem.number;
if(currentNum===prevNum){
result.splice(prevIndex,1,Object.assign({},prev,{
index:[...prev.index,index]
}))
}else{
result.push(Object.assign({},currentItem,{
index:[index]
}));
}
return result;
},[]);
}
let result = convert(org_array);
console.log('result:',result);
console.log(result.map((item)=>{
return {
number:item.number,
index:item.index.length===1?`${item.index[0]}`:`${item.index[0]}-${item.index[item.index.length-1]}`
}
}))
}());
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
查看demo