JavaScript:推送嵌套对象键值对

Posted

技术标签:

【中文标题】JavaScript:推送嵌套对象键值对【英文标题】:JavaScript: Pushing nested object key value pairs 【发布时间】:2021-08-17 01:13:31 【问题描述】:

我正在从 Firebase 获取 JSON 数据,并希望以不同的方式转换数据。我的问题是如何将嵌套对象键值对推送到单个对象中?

这是我的代码...

const postData = [];

for (const key in data) 
  postData.push(
   id: key,
   postComments: data[key].hasOwnProperty('comments')
     ? 
         id: Object.keys(data[key].comments),
         ...Object.values(data[key].comments),
       
     : [],
   ...data[key]
  );
;

console.log(postData);

我目前得到:

id: "-M_Spc3mBWVkUWKAAk_u", likes: 0, day: 22, month: 3,
     comments: 
       -M_McCXxZuoF60tmcKCV: likes: 12, day: 23, month: 3
       -M_Mc93EsXFxA_OS7g6Q: likes: 234, day: 22, month: 3
     
     postComments: [
       0: likes: 12, day: 23, month: 3
       1: likes: 234, day: 22, month: 3
       id: ['-M_McCXxZuoF60tmcKCV', '-M_Mc93EsXFxA_OS7g6Q']
     ]
 

我要输出数据:

id: "-M_Spc3mBWVkUWKAAk_u", likes: 0, day: 22, month: 3,
     comments: 
       -M_McCXxZuoF60tmcKCV: likes: 12, day: 23, month: 3
       -M_Mc93EsXFxA_OS7g6Q: likes: 234, day: 22, month: 3
     
     postComments: [
       0: id: "-M_McCXxZuoF60tmcKCV", likes: 12, day: 23, month: 3
       1: id: "-M_Mc93EsXFxA_OS7g6Q", likes: 234, day: 22, month: 3
     ]
 

我已经为此苦苦挣扎了几天。任何帮助将不胜感激。谢谢。

【问题讨论】:

你的 json 输入数据是什么样子的? 能否请您发布原始数据对象?它将更容易弄清楚如何转换数据。 在您的“我正在获取”中,postComments 不能有 id 属性,因为它是一个数组。能否请您发布原始数据对象? 用 cmets obj 更新。很抱歉错过了那个数据点。 【参考方案1】:

感谢 ulou 让我思考您的 .map 答案。我不知道我怎么没想到。我一定被烧坏了,哈哈。这是我一直在寻找的答案。

  for (const key in data) 
    postData.push(
      id: key,
      postComments: data[key].hasOwnProperty("comments")
        ? Object.entries(data[key].comments).map((k) => (
            id: k[0],
            ...k[1],
          ))
        : [],
      ...data[key],
    );
  

【讨论】:

以上是关于JavaScript:推送嵌套对象键值对的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 新旧替换六:键值对数据

javascript 将键值对添加到JavaScript对象

javascript 删除对象内的键值对

感受JavaScript之美

将键值对添加到 Javascript 对象中

java中Map.Entry的使用方法