js数组转换
`
a = [{ linesIndex: 1,words: '我们1',start: 18},
{ linesIndex: 0,words: '我们0',start: 12},
{ linesIndex: 2,words: '我们2',start: 23},
{ linesIndex: 2,words: '我们2',start: 18},
{ linesIndex: 4,words: '我们4',start: 23},
{ linesIndex: 0,words: '我们0',start: 27},
{ linesIndex: 1,words: '我们1',start: 12},
{ linesIndex: 1,words: '我们1',start: 10}
]
`
转为
`
b = [[
{ linesIndex: 0,words: '我们0',start: 12},
{ linesIndex: 0,words: '我们0',start: 27}
],
[
{ linesIndex: 1,words: '我们1',start: 10},
{ linesIndex: 1,words: '我们1',start: 12},
{ linesIndex: 1,words: '我们1',start: 18}
],
[
{ linesIndex: 2,words: '我们2',start: 18},
{ linesIndex: 2,words: '我们2',start: 23},
],
[],
[
{ linesIndex: 4,words: '我们4',start: 23},
],
]
`
回答
b = a.reduce((rst, item) => { if (!rst[item.linesIndex]) {
rst[item.linesIndex] = [item]
} else {
rst[item.linesIndex].push(item)
}
return rst
}, [])
let akeys = a.map(item => item.linesIndex);// 去重
akeys = Array.from(new Set(akeys));
// 升序
akeys = akeys.sort((a,b) => a-b);
// 取最大值
let maxVal = akeys[akeys.length - 1];
let newArr = [];
// 循环最大值
for(let i=0; i<=maxVal; i++) {
newArr[i] = [];
for(let j=0; j< a.length; j++) {
if (a[j].linesIndex === i) {
newArr[i].push(a[j])
}
}
}
console.log(newArr)
function handleData(data) { return data.reduce((p, c) => {
const i = p.findIndex(item => item[0] && item[0].linesIndex === c.linesIndex);
if (i === -1) {
return [...p, [c]];
}
p[i].push(c);
return p;
}, []);
}
console.log(handleData(a));
以上是 js数组转换 的全部内容, 来源链接: utcz.com/a/36526.html