推送数组中的对象只返回最后推送的对象

use*_*092 1 html javascript datatable yui

我正在研究 YUI 数据表,以填充我想从外部动态发送列及其值的数据表,为此我编写了以下代码:

<html>
<script src="http://yui.yahooapis.com/3.17.2/build/yui/yui-min.js"></script>
<div class="example yui3-skin-sam" id="simple"> <!-- You need this skin class -->
</div>

<script>
var cols = ["id", "name", "price"];
var obj = {
    id: "",
    name: "",
    price: ""
};
var data2 = new Array();
obj.id = "ga";
obj.name = "gadget";
obj.price = "$6.99";
data2.push(obj);
obj.id = "ga2";
obj.name = "gadget2";
obj.price = "$7.99";
data2.push(obj);
obj.id = "ga3";
obj.name = "gadget3";
obj.price = "$8.99";
data2.push(obj);
YUI().use("datatable", function (Y) {
    // A table from data with keys that work fine as column names
    var simple = new Y.DataTable({
        columns: cols,
        data   : data2,
        summary: "Price sheet for inventory parts",
        caption: "Example table with simple columns"
    });

    simple.render("#simple");

});
</script>
</html>
Run Code Online (Sandbox Code Playgroud)

现在的问题是,它只显示了 data2 中推入的最后一个 obj .. 请告诉我为什么它不显示所有三个 obj。此代码的结果表是

id      name    price

ga3   gadget3   $8.99
Run Code Online (Sandbox Code Playgroud)

小智 6

不确定这是否相关,但如果人们仍然来这里寻找一个简单的解决方案......

只需将对象和 JSON.parse 再次字符串化即可复制它,而不是像这样引用对象;

data2.push(JSON.parse(JSON.stringify(obj)));
Run Code Online (Sandbox Code Playgroud)