Javascript 向JSON对象添加项

Javascript 向JSON对象添加项,javascript,Javascript,我使用承诺获取一个JSON对象: var x = get(); x.done(function(data) { for(var i in data) { } }); 当我执行console.logdata时返回此数据 这很好,但在for循环中,我想向数据添加2项 我试着把这个加到我的电脑里。完成了 但这并没有增加数据 我的for循环如下所示: for(var i in data) { var m = '

我使用承诺获取一个JSON对象:

var x = get();
x.done(function(data) {
    for(var i in data) {

    }
});
当我执行console.logdata时返回此数据

这很好,但在for循环中,我想向数据添加2项

我试着把这个加到我的电脑里。完成了

但这并没有增加数据

我的for循环如下所示:

                 for(var i in data) {
                    var m = '<option value="' + data[i].data.id + '"'
                    if(data[i].data.id == selected_val) {
                        m += ' selected="selected"';
                    }
                    m += '>' + data[i].data.name + '</option>';
                    $('#' + value_element_id).append(m);
                }
for(var i in data) {
  var m = '<option value="' + data[i].data.id + '"'
  if(data[i].data.id == selected_val) {
    m += ' selected="selected"';
  }
  m += '>' + data[i].data.name + '</option>';
  $('#' + value_element_id).append(m);

  // here it will add obj to data
  var obj = {name: "Light"};
  data = {
    ...data,
    obj
  }
}
在这种情况下,我认为数据不是数组,所以它没有.push方法。可以向对象添加属性,如下所示:

                 for(var i in data) {
                    var m = '<option value="' + data[i].data.id + '"'
                    if(data[i].data.id == selected_val) {
                        m += ' selected="selected"';
                    }
                    m += '>' + data[i].data.name + '</option>';
                    $('#' + value_element_id).append(m);
                }
for(var i in data) {
  var m = '<option value="' + data[i].data.id + '"'
  if(data[i].data.id == selected_val) {
    m += ' selected="selected"';
  }
  m += '>' + data[i].data.name + '</option>';
  $('#' + value_element_id).append(m);

  // here it will add obj to data
  var obj = {name: "Light"};
  data = {
    ...data,
    obj
  }
}

如果要向select添加两个以上的项目,只需在循环开始之前将新对象推送到数据数组中即可。对象必须包含与Promise中的JSON匹配的数据子属性中的结构、属性名称和id,以便循环代码能够处理它们

在最简单的情况下,它可以像

x.done(function(data) {
  data.push({ "data": { "name": "light", "id": 1234 } });
  data.push({ "data": { "name": "dark", "id": 5678 } });

  for(var i in data) {
    var m = '<option value="' + data[i].data.id + '"'
    if (data[i].data.id == selected_val) {
      m += ' selected="selected"';
    }
    m += '>' + data[i].data.name + '</option>';
    $('#' + value_element_id).append(m);
  }
});

演示:

您是指javascript对象吗?JSON=string,所以JSON对象=string对象。在您的.done中,服务器正在发送一个JSON字符串,jquery正在将其转换为javascript对象数据。我可能错了,但我非常确定数据对象不是JS对象。您最好创建一个新对象,将数据映射到该对象上,然后添加新值。请参阅我的更新,其中包含for循环中的内容-如果我感到困惑,请道歉-我的js/jquery知识不是很好,没有添加到数据中…不确定这是怎么可能的:。让我们看看你到底做了什么也许是明智的。值得注意的是,{name:Light}不会生成与数据数组中已经存在的对象具有相同结构的对象,因此添加这样的对象没有多大意义。如果在运行循环之前添加了该字段,则循环到达该对象时可能会崩溃,因为对象中的属性未定义。是的,可以省略其他字段,但至少需要添加一个包含循环所需结构和字段的对象。e、 g.{数据:{名称:light,id:1234}。从技术上讲,这会使其他字段未定义,而不是空字段,但出于此目的,这不会有任何区别。请参阅上面的注释:for循环数据将包含obj对象。但是循环不会在添加的属性上迭代。@MeruzhJanoyan在循环已经运行时添加新对象没有明显的意义。不确定本规范的目的是什么?数据是一个数组。console.log的输出使得清晰的输出看起来像是来自Chrome,[{…}]和length:1__proto__:Array0是非常清晰的赠品…你认为Array这个词在那里做什么?不管怎样,它是Array和JSON对象的混合版本,所以如果他需要在其中添加属性,他可以使用ES6 spread@ADyson它是数组和JSON对象的混合版本…,不,不是。你的具体证据是什么?该控制台日志中没有JSON字符串。它是一个数组,因此,可以使用.push添加项。下面是生成console.log输出的代码: