js for循环以逗号拆分为新数组

原数据格式↓

const data = [{ name: 'apple', cut: 'a,b,c' }, { name: 'trigger', cut: 'a,g' }]

期望数据格式↓

const data1 = [{ name: 'apple', final: 'a' },
               { name: 'apple', final: 'b' },
               { name: 'apple', final: 'c' },
               { name: 'trigger', final: 'a' },
               { name: 'trigger', final: 'g' }]

在原数据格式data中的cut字段,用逗号来拆分为新字段final,name不变

请教各位大神该如何操作,小弟在这里先谢谢各位大神的解答了,感激不尽!

阅读 3.5k
5 个回答

基本思路:把 cut 拆分之后进行一次映射,可以拿到每个原始对象对应的一个数组,组合起来就是一个二维数据;再把这个二维数据展开,就是你要的答案。

flatMap 就是先映射再展开

const data = [{ name: 'apple', cut: 'a,b,c' }, { name: 'trigger', cut: 'a,g' }];

const data1 = data.flatMap(it =>
    it.cut.split(",")
        .map(s => ({ name: it.name, final: s }))
);

console.log(data1);
const data = [{ name: 'apple', cut: 'a,b,c' }, { name: 'trigger', cut: 'a,g' }]
const res = []
data.forEach(item => {
  const arr = item.cut.split(',')
  arr.forEach(it => {
    res.push({
      name: item.name,
      final: it
    })
  })
})
console.log(res)
const data = [{ name: 'apple', cut: 'a,b,c' }, { name: 'trigger', cut: 'a,g' }]
console.log(data.reduce((total, item) => {
  return total.concat(item.cut.split(',').map(val => {
    const res = {}
    res.name = item.name
    res.final = val
    return res
  }))
}, []))
data.reduce((a,c)=>{
    c.cut.split(',').forEach(final=>{
       a.push({
         name:c.name,
         final  
       })
    })
    return a;
},[])
const data = [{ name: 'apple', cut: 'a,b,c' }, { name: 'trigger', cut: 'a,g' }];

const split = (arr) => {
    if (!arr || !Array.isArray(arr) || !arr.length) {
        return;
    }
    return arr.reduce((val, acc) => {
        acc.cut.split(',').forEach((item) => {
            val.push({
                name: acc.name,
                cut: item,
            });
        });
        return val;
    }, [])
};

console.log(split(data));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏