是否有可能在每次找到特定值时将数组拆分为较小的数组?在这种情况下,每次type等于"divider"。
输入:
[
{
"type": "type-a",
"name": "Foo"
},
{
"type": "type-b",
"name": "Foo"
},
{
"type": "type-c",
"name": "Foo"
},
{
"type": "divider",
"name": "Foo"
},
{
"type": "type-b",
"name": "Foo"
},
{
"type": "type-b",
"name": "Foo"
},
{
"type": "divider",
"name": "Foo"
},
{
"type": "type-c",
"name": "Foo"
}
]期望产出:
[
[
{
"type": "type-a",
"name": "Foo"
},
{
"type": "type-b",
"name": "Foo"
},
{
"type": "type-c",
"name": "Foo"
}
],
[
{
"type": "type-b",
"name": "Foo"
},
{
"type": "type-b",
"name": "Foo"
}
],
[
{
"type": "type-c",
"name": "Foo"
}
]
]发布于 2022-07-14 12:30:08
您可以在这里将reduce用作:
const arr = [{ "type": "type-a", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "type-c", "name": "Foo" }, { "type": "divider", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "divider", "name": "Foo" }, { "type": "type-c", "name": "Foo" }];
const temp = [];
const result = arr.reduce((acc, curr) => {
if (curr.type === 'divider') {
acc.push([...temp]);
temp.length = 0;
} else {
temp.push(curr);
}
return acc;
}, []);
if (temp.length) result.push([...temp]);
console.log(result);/* This is not a part of answer. It is just to give the output full height. So IGNORE IT */
.as-console-wrapper { max-height: 100% !important; top: 0; }
发布于 2022-07-14 12:33:13
这应该能行
const arr = [{ "type": "type-a", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "type-c", "name": "Foo" }, { "type": "divider", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "type-b", "name": "Foo" }, { "type": "divider", "name": "Foo" }, { "type": "type-c", "name": "Foo" }];
function divide(container, divider) {
const final = [];
let tmp = new Array();
for (let item of container) {
if (item.type === divider) {
final.push(tmp);
tmp = new Array();
}
item.type !== divider && tmp.push(item)
}
tmp.length > 0 && final.push(tmp)
return final;
}
const res = divide(arr, 'divider');
console.log(res)
发布于 2022-07-14 12:30:01
尝尝这个。搜索数组的每个对象,直到找到divider对象为止,将所有对象推入另一个数组。
如果找到divider,则增加索引,忽略该对象并继续。
let arr=[{"type":"type-a","name":"Foo"},{"type":"type-b","name":"Foo"},{"type":"type-c","name":"Foo"},{"type":"divider","name":"Foo"},{"type":"type-b","name":"Foo"},{"type":"type-b","name":"Foo"},{"type":"divider","name":"Foo"},{"type":"type-c","name":"Foo"}]
let finalArr = []
let currentIndex = 0;
for (let obj of arr) {
if (obj.type === 'divider') {
currentIndex++;
} else {
(finalArr[currentIndex] = finalArr[currentIndex] || []).push(obj);
}
}
console.log(finalArr)
https://stackoverflow.com/questions/72980473
复制相似问题