javascript - 在 $.each 中的数组中推送对象
问题描述
也许我只是瞎了眼,但我现在挣扎了很长时间:
我在这里有一小段 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
-field 的值,然后隐藏该行并将所有值保存在一个对象中,然后将其推送到一个数组中。
该参数取自谷歌浏览器的控制台选项卡:
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
解决方案
你应该移动这个:
var oSite = {};
...在each
它下面的回调中,因为您在每次迭代中都需要一个新对象。
否则,您将一次又一次地改变同一个对象,将同一个对象反复推入aSites
数组,最终导致对同一个对象的多个引用。
不相关,但您可以$.map
用来创建您的数组(或 vanilla JS links.map()
):
var aSites = $.map(links, function(v) {
return { name: v.split(".")[1], url: v };
});
推荐阅读
- javascript - 获取音频文件并将其加载到表单附件中
- php - 将html登录表单动态更改为注册表单
- angular - 使用反应形式的 Angular Firebase 编辑对象
- operating-system - 一个过程可以要求 x 量的时间,但需要 y 量吗?
- javascript - 在我的网页末尾附加 getJSON 的问题
- reactjs - 使用 react 构建信息丰富的公司网站时,我是否应该对内容进行硬编码?
- laravel - 如何在 Laravel 中使用 orderBy() 和模型的方法
- arduino - 我的框图出现问题:Init.vi 出现错误 5002
- neo4j - Neo4j 密码查询因未知语法错误而失败
- pip - Linux 上的 Lektor 安装失败