如何从 Javascript 中的现有对象创建新对象?

新手上路,请多包涵

在 JavaScript 应用程序上工作,需要帮助 根据从 ajax 调用收到的响应创建新对象。

收到的输出是对象数组,示例格式如下:

 {
  "items": [
    {
      "id": "02egnc0eo7qk53e9nh7igq6d48",
      "summary": "Learn to swim",
      "start": {
        "dateTime": "2017-03-04T19:00:00+05:30"
      }
    }

]
}

但是,我的组件需要以下格式的 JS 对象:

 {
id: "e1",
title: "Express",
start: "Jan 13, 2010",
description: "Jan 13, 2010"
}

以下方法是否正确,请提出更好的方法(如果有)

 var content = {
    "items": [{
        "id": "02egnc0eo7qk53e9nh7igq6d48",
        "summary": "Learn to code",
        "start": {
          "dateTime": "2017-03-04T19:00:00+05:30"
        }
      }
      }
    };
    var gcalEvents = {};
    var jsonObj = {
      "id": "e1",
      "title": "Oracle Application Express",
      "start": "Jan 13, 2010",
      "description": "Jan 13, 2010"
    };

    console.log(content.items.length);
    for (var index = 0; index < content.items.length; index++) {
      var obj = content.items;
      console.log(obj);

      jsonObj.id = obj[index]["id"];
      jsonObj.title = obj[index].summary;
      jsonObj.start = obj[index].start.dateTime;
      jsonObj.description = "";
      console.log(jsonObj);
      gcalEvents[index] = jsonObj;
    }
    console.log(gcalEvents);

原文由 Rohit 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 485
2 个回答

您可以采用以下更实用的方法:

 var parsed = content.items.map(function (item) {
    return {
        id: item.id,
        title: item.summary,
        start: item.start.dateTime,
        description: item.start.dateTime
    }
})

这使用数组属性的 map 方法遍历数组的每个项目并返回一个新的已解析对象数组。

看看这个 更完整的例子

原文由 Alex Jones 发布,翻译遵循 CC BY-SA 3.0 许可协议

本质上,您正在尝试将一组数据“映射”到另一组数据。 Javascript 的数组映射功能应该足够了。例如。

 var content = {
  "items": [{
    "id": "02egnc0eo7qk53e9nh7igq6d48",
    "summary": "Learn to code",
    "start": {
      "dateTime": "2017-03-04T19:00:00+05:30"
    }
  }]
};

var results = content.items.map(function (item) {
  return {
    id: item.id,
    title: item.summary,
    start: item.start.dateTime,
    description: ""
  };
});

console.log(results);

原文由 g.sui 发布,翻译遵循 CC BY-SA 3.0 许可协议

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