首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript -像字符串一样拆分数组

JavaScript -像字符串一样拆分数组
EN

Stack Overflow用户
提问于 2022-07-14 12:25:25
回答 4查看 61关注 0票数 0

是否有可能在每次找到特定值时将数组拆分为较小的数组?在这种情况下,每次type等于"divider"

输入:

代码语言:javascript
复制
[
    {
        "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"
    }
]

期望产出:

代码语言:javascript
复制
[
    [
        {
            "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"
        }
    ]
]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-07-14 12:30:08

您可以在这里将reduce用作:

代码语言:javascript
复制
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);
代码语言:javascript
复制
/* 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; }

票数 0
EN

Stack Overflow用户

发布于 2022-07-14 12:33:13

这应该能行

代码语言:javascript
复制
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)

票数 1
EN

Stack Overflow用户

发布于 2022-07-14 12:30:01

尝尝这个。搜索数组的每个对象,直到找到divider对象为止,将所有对象推入另一个数组。

如果找到divider,则增加索引,忽略该对象并继续。

代码语言:javascript
复制
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)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72980473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档