首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在javascript中合并动态对象数组

在javascript中合并动态对象数组
EN

Stack Overflow用户
提问于 2019-03-19 00:08:10
回答 4查看 686关注 0票数 1

我试图用key:value数组动态构建一个对象,但是使用不同的方法,我总是在value数组中使用一个单数项(在响应中有多个值)。

Psuedocode:

代码语言:javascript
运行
复制
var myFunction = function () {
    var myObject = {};
    $.ajax('http://the.url.com', {
        type: "GET",
        success: function (res) {
            $(res).each(function (i, v) {
                    var name = v.name;
                    var id = v.id;
                    // create object with building block and tech id to associate techs to BBs
                    myObject[name] = new Array();
                    myObject[name].push(id);
                });
        },
        error: function (xhr) {}
    }
}

当前输出:

代码语言:javascript
运行
复制
{
    key1: ["value1c"]
    key2: ["value2a"]
    key3: ["value3b"]
}

所需输出:

代码语言:javascript
运行
复制
{
    key1: ["value1a", "value1b","value1c"]
    key2: ["value2a"]
    key3: ["value3a", "value3b"]
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-03-19 00:11:09

您将用每个键的新数组覆盖现有数组,然后用下面的代码行推入最新的数组:

代码语言:javascript
运行
复制
 myObject[name] = new Array();

尝试添加检查以避免覆盖:

代码语言:javascript
运行
复制
 myObject[name] = myObject[name] || new Array();
票数 4
EN

Stack Overflow用户

发布于 2019-03-19 00:10:35

我认为在创建一个新的myObject[name]之前,您需要检查它是否已经存在。因为如果每次都创建一个新的,它将被覆盖

代码语言:javascript
运行
复制
var myFunction = function () {
  var myObject = {};
  $.ajax('http://the.url.com', {
    type: "GET",
    success: function (res) {
      $(res).each(function (i, v) {
        var name = v.name;
        var id = v.id;
        // create object with building block and tech id to associate techs to BBs
        if (!myObject[name]) {
          myObject[name] = new Array();
        }
        myObject[name].push(id);
      });
    },
    error: function (xhr) {}
  }
}
票数 2
EN

Stack Overflow用户

发布于 2019-03-19 00:11:25

输出是key1: ["value1c"],因为对象中的key是唯一的,所以它创建键并只存储最新的值。您可以使用hasOwnProperty并检查myObject是否具有该名称的任何密钥。如果是,则推送值,否则创建一个键值对并向其添加id

代码语言:javascript
运行
复制
$(res).each(function(i, v) {
  var name = v.name;
  var id = v.id;
  if (myObject.hasOwnProperty(name)) {
    myObject[name].push(id);
  } else {
    myObject[name] = [id];
  }
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55225552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档