json对象推送使用循环中的最后一项覆盖所有项目?

Posted

技术标签:

【中文标题】json对象推送使用循环中的最后一项覆盖所有项目?【英文标题】:json object push overwrite all item using last item in the loop? 【发布时间】:2020-04-05 14:18:51 【问题描述】:
var options = [];
$(b).each(function (a) 
    debugger;
    s += '<option value=\'' + b[a].Material + '\'>' + b[a].Material + '</option>'
    item = ;
    item["name"] = b[a].Material;
    item["value"] = b[a].Material;
    item["checked"] = false;
    options.push(item);
);
console.log(options);    

s 的值为

<option value='MAB380-01'>MAB380-01</option>
<option value='MAB380-02'>MAB380-02</option>

在第一次迭代中,options 具有 MAB380-01。 但是在第二次迭代之后,options 有两个 MAB380-02

Firefox 和 Chrome 给我正确的结果,但不是 IE。

【问题讨论】:

我看不出有什么问题。完全没问题。 jsfiddle.net/f67my2n0 @MahbubMoon 现在这很奇怪,这不是我在 IE 11 中得到的。 每个回调都有两个参数,第一个是索引,第二个是值。 jsfiddle.net/krwb2914。从@Mahbub Moon 修改。试试看 无法在 IE11 上重现 尝试在每个回调中控制日志值 【参考方案1】:
var options = [];
$(b).each(function (a) 
    debugger;
    s += '<option value=\'' + b[a].Material + '\'>' + b[a].Material + '</option>'
    var item = new Object();
    item.name = b[a].Material;
    item.value = b[a].Material;
    item.checked = false;
    options.push(item);
);
console.log(options);

这些代码适用于 Chrome、Firefox 和 IE11。

【讨论】:

以上是关于json对象推送使用循环中的最后一项覆盖所有项目?的主要内容,如果未能解决你的问题,请参考以下文章

List<T> 将 foreach 循环中的所有项目覆盖为最后一个值

添加项目以成为对象中的第一项

如何定位动态条目网格行中的第一项和最后一项?

为啥我的 IdentitySet 只显示最后一项?

如何在反应中推送 JSON 对象数组中的项目?

Core Data 只保存最后一项