将项目添加到JSON对象

时间:2019-09-16 14:37:33

标签: javascript

我正在使用promise来获取JSON对象:

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

    }
});

当我执行console.log(data);

时返回的数据
[{…}]
0:
customer: "9028"
data:
active: "1"
customer: "9028"
description: ""
id: "13717"
inherited: "0"
name: "Out of Hours"
priority: "1"
shared: "0"
sound: ""
__proto__: Object
voip_seq: "4"
__proto__: Object
length: 1
__proto__: Array(0)

所以工作正常,但是在我的for循环中,我想向data添加2个项目

我尝试将其添加到我的.done

var obj = { name: "Light" };
data.push(obj);

但这并没有加到data

我的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);
                }

2 个答案:

答案 0 :(得分:0)

如果要在选择项中再添加两个项目,只需在循环开始之前将新对象推入data数组中即可。这些对象必须包含与来自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);
  }
});

演示:https://jsfiddle.net/a286b7fw/1/

答案 1 :(得分:-1)

在这种情况下,我认为data不是数组,因此没有.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);

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