JS按对象字段拆分对象数组

时间:2018-12-08 13:14:14

标签: javascript arrays split delimiter

我有一组令牌:

[
    {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'}
    ]
]

我应该怎么做?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

每次使用

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);