【问题标题】:JS split array of objects by object fieldJS按对象字段拆分对象数组
【发布时间】:2018-12-08 13:14:13
【问题描述】:

我有一个令牌数组:

[
    {type: 'name', value: 'foo'},
    {type: 'string', value: 'bar'},
    {type: 'special', value: ','},
    {type: 'name', value: 'buzz'}
]

我想将它们按等于,的值拆分:

[
    [
        {type: 'name', value: 'foo'},
        {type: 'string', value: 'bar'}
    ],
    [
        {type: 'name', value: 'buzz'}
    ]
]

我该怎么做?

【问题讨论】:

  • 你试过什么?您具体需要哪些帮助?
  • 嗯,唯一想到的是遍历数组并将对象放入该数组内的数组中,然后当遇到逗号时,启动另一个数组。一定有更好的方法,但我无法真正理解它..

标签: javascript arrays split delimiter


【解决方案1】:

您可以使用Array.reduce() 来迭代项目。分三种情况:

  1. 该项的值为, - 添加一个不包含该项的新子数组。
  2. 没有子数组 - 为该项添加一个新的子数组。
  3. 其余的 - 将项目添加到最后一个子数组。

const data = [
    {type: 'name', value: 'foo'},
    {type: 'string', value: 'bar'},
    {type: 'special', value: ','},
    {type: 'name', value: 'buzz'}
];

const result = data.reduce((r, o) => {
  if(o.value === ',') return [...r, []];
  if(!r.length) return [[o]];
  
  r[r.length - 1].push(o);
  
  return r;
}, []);

console.log(result);

【讨论】:

    【解决方案2】:

    使用 forEach

    let arr = [
        {type: 'name', value: 'foo'},
        {type: 'string', value: 'bar'},
        {type: 'special', value: ','},
        {type: 'name', value: 'buzz'}
    ]
    
    let op = [];
    let temp = [];
    arr.forEach((e,i)=>{
      if(e.value === ',' && temp.length){
        op.push(temp);
        temp =[];
      } else {
        temp.push(e);
      }
    });
    if(temp.length) op.push(temp);
    console.log(op);

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2021-08-28
      • 1970-01-01
      • 2019-04-15
      • 2018-09-09
      • 2017-04-07
      • 2023-01-25
      • 2011-05-16
      相关资源
      最近更新 更多