将对象推入$ .each

时间:2019-02-13 10:31:47

标签: javascript jquery

也许我只是瞎子,但现在我正在挣扎很多时间:

我这里有一小段JS代码:

var linkInput = $('#Link input.gwt-TextBox').val();
var parentRow = $('#Link').parent().parent();
var links = linkInput.split("|");

// hide text-input
$(parentRow).hide();

// get rid of empty elements
links = links.filter(Boolean);

var aSites = [];
var oSite = {};

$(links).each(function (k, v) {

    splits = v.split(".");
    domainName = splits[1];
    oSite.name = domainName;
    oSite.url = v;
    aSites.push(oSite);
});

console.log(aSites);

要指定:获取input字段的值,然后隐藏该行,并将所有值保存在一个对象中,然后将其推入数组。

参数,取自Google Chrome浏览器的控制台标签:

var links = ["www.myshop1.de/article/1021581", "https://www.myshop2.de/article/1021581"] [type: object]

我想,我要遍历此对象的所有元素(在这种情况下为2次),将值推入对象中,然后将对象推入数组中,以便以后可以访问所有这些值。

但是在某些时候,由于我的输出看起来像这样,我似乎覆盖了以前的值:

0: {name: "myshop1", url: "https://www.myshop1.de/1021581"}
1: {name: "myshop2", url: "https://www.myshop2.de/1021581"}
length: 2
__proto__: Array(0)

我的错误在哪里?有没有更聪明的方法来实现这一目标?

旁注:

我试图只使用一个数组(不添加对象),但是好像我 不能使用像这样的关联密钥:

var myKey = "foo";
var myValue = "bar";
myArray[myKey] = myValue

1 个答案:

答案 0 :(得分:3)

您应该移动它:

var oSite = {};

...位于其下方的each回调中,因为在每次迭代中都需要一个 new 对象。

否则,您将一次又一次地变异相同的对象,将 same 对象重复推入aSites数组,该数组最终会引用多个 same 对象。

不相关,但是您可以使用$.map创建数组(或香草JS links.map()):

var aSites = $.map(links, function(v) {
    return { name: v.split(".")[1], url: v };
});