数组对象中的对象数据如何拆分出来 重新拼接?

原数据

      let obj = [
        {
          bid: 0,
          name: 'zhangsan',
          content: {
            title: '渲染内容',
            age:18
          },
          time: 4546465,
        },
        {
          bid: 0,
          name: 'lisi',
          content: {
            title: '渲染内容1',
            age:18
          },
          time: 4546465,
        },
        {
          bid: 0,
          name: 'wangwu',
          content: {
            title: '渲染内容2',
            age:18
          },
          time: 4546465,
        },
      ]

期望的结果

  let obj = [
    {
      bid: 0,
      name: 'zhangsan',
      title: '渲染内容',
      age:18,
      time: 4546465,
    },
    {
      bid: 0,
      name: 'lisi',
      title: '渲染内容1',
      age:18
      time: 4546465,
    },
    {
      bid: 0,
      name: 'wangwu',
      title: '渲染内容2',
      age:18
      time: 4546465,
    },
  ]
阅读 2.3k
5 个回答
✓ 已被采纳
obj.map(item => {
  const {content, ...others} = item
  return {...content, ...others}
})

这个也可以

let arrayList = Array.from(Newobj, function (item, index) {
  return {
    bid: item.bid,
    name: item.name,
    title: item.content.title,
    age: item.content.age,
    time: item.time,
  }
})

arrayList [
  { bid: 0, name: 'zhangsan', title: '渲染内容', age: 18, time: 4546465 },
  { bid: 0, name: 'lisi', title: '渲染内容1', age: 18, time: 4546465 },
  { bid: 0, name: 'wangwu', title: '渲染内容2', age: 18, time: 4546465 }
]
  var c = []
  obj.forEach((item) => {
    c.push(Object.assign(item, item.content))
    console.log(c)
    c.forEach((item) => {
      delete item.content
    })
  })
  console.log(obj)

可以了

哈哈哈,饭都做好了...得会吃啊...

那好吧

let a = obj.map(item => {
  const {content, ...others} = item
  return {...content, ...others}
})

console.log(a)

我是来评作者自答的

先说问题,既然 obj 是一个数组,是不是用 arr 命名更好?

再说作者自答,

var c = [];
obj.forEach((item) => {
    // 这一步保留了 content 属性,所以后面要想办法去除,
    // 本身没问题,问题出在去除 content 的地方
    c.push(Object.assign(item, item.content));
    console.log(c);
    // 这个循环应该放在 obj.forEach() 之后,等 c 完整之后再来处理
    // 放在这里会将之前处理过的记录反复处理,浪费算力
    // 然而,其实本不应该再使用一个循环,
    // 直接给个临时变量,先 delete 再 push 就好
    c.forEach((item) => {
        delete item.content;
    });
});

Object.assign 会改变原对象,其实是没有必要再用一个新数组来保存的。

obj.forEach(item => {
    Object.assign(item, item.content);
    delete item.content;
});

即便想用新数组,把 forEach 改为 map 就好,也不需要自己去 push

const c = obj.map(item => {
    Object.assign(item, item.content);
    delete item.content;
    return item;
});
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏