我想通过属性“ icon”将我的数组转换为数组。
const array = [
{ icon: true },
{ icon: false },
{ icon: false },
{ icon: true },
{ icon: false }
]
我需要:
[[{icon: true}, {icon: false}, {icon: false}], [{{icon: true}, {icon: false}}]]
属性icon === true
是新数组形成开始的标志。
我认为您应该使用reduce函数。
array.reduce((result, item, index) => { ... }, [])
如何最好地编写一个转换?谢谢!
答案 0 :(得分:4)
您可以使用.reduce()
方法,如下所示:
const data = [{ icon: true }, { icon: false }, { icon: false }, { icon: true }, { icon: false }]
const result = data.reduce((r, c) => {
if(c.icon === true)
r.push([c]);
else
r[Math.max(r.length - 1, 0)].push(c);
return r;
},[]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
您可以使用while
循环。
const array = [{ icon: true }, { icon: false }, { icon: false }, { icon: true }, { icon: false }]
i = 0;
result = [];
aux = [];
while(i < array.length){
if(array[i].icon){
if(aux.length !== 0){
result.push(aux);
aux = [array[i]];
}
else
aux.push(array[i]);
}
else
aux.push(array[i]);
i++;
}
result.push(aux);
console.log(result);
答案 2 :(得分:0)
您可以在数组上使用闭包进行插入。这样可以防止查找数组中的最后一项。
const
data = [{ icon: true }, { icon: false }, { icon: false }, { icon: true }, { icon: false }],
result = data.reduce((a => (r, o) => {
if (o.icon) r.push(a = []);
a.push(o);
return r;
})(), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 3 :(得分:0)
const array = [
{ icon: true },
{ icon: false },
{ icon: false },
{ icon: true },
{ icon: false }
];
console.log(grouper(array));
function grouper(array) {
return array.reduce((acc, next) => {
const entry = [next];
if (next.icon) return acc.concat([entry]);
const beforeNextCollection = acc.slice(0, acc.length - 1);
const nextCollection = acc[acc.length - 1];
const updatedCollection = nextCollection.concat(entry);
return beforeNextCollection.concat([updatedCollection]);
}, []);
}