Javascript 向JSON对象添加项
我使用承诺获取一个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 = '
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输出的代码: