我很难搜索/解释我正在尝试做的事情,但我想将数据添加到JavaScript对象中。我想要添加数据的索引可能存在也可能不存在,并且索引名称将是动态的,因此我不能只在开始时定义所有对象。
让我们说当用户点击我网站上的链接时,我正在添加一个对象。我已经定义了我的对象:
exampleObject.fruit = {};
exampleObject.fruit.strawberry = true;
如果用户点击水果链接,我想将水果添加到对象中。我通常会这样做:
if ( typeof exampleObject.fruit === 'undefined' ){
exampleObject.fruit = {};
exampleObject.fruit.cherry = true;
} else {
exampleObject.fruit.cherry = true;
}
我的问题是,当用户点击下一个水果时,我不想覆盖该对象。我需要检查对象是否已定义,然后添加到它:
{{1}}
我想知道的是,如果有上述条件的简写方法吗?因为我会做很多事情,所以我希望能有一个单行程。我的下一个想法是为此创建一个函数,但我不想重新发明轮子或限制自己(如果我想在此对象中使用数组将所有水果推入一个索引)。在这种情况下,jQuery是一个选项,但不一定是我的第一选择。
答案 0 :(得分:2)
exampleObject = exampleObject || {};
exampleObject.fruit = exampleObject.fruit || {};
exampleObject.fruit.cherry = true;
答案 1 :(得分:1)
基于您已经说过索引名称将是动态的事实,使用方括号来调整对象键/索引:
function addFruit (name) {
exampleObject = exampleObject || {};
exampleObject.fruit = exampleObject.fruit || {};
if (typeof exampleObject.fruit[name] == 'undefined')
exampleObject.fruit[name] = true;
}
答案 2 :(得分:1)
我会选择函数路径,具体取决于新索引的极端程度。这样您就可以一次性分配类别和项目。
"GET /v2/ HTTP/1.1" 404 466 "-" "docker/1.9.1 go/go1.4.2 git-commit/a34a1d5 kernel/3.13.0-24-generic os/linux arch/amd64"
172.28.144.202 - - [22/Dec/2015:11:06:00 -0500] "GET /v2/ HTTP/1.1" 404 466 "-" "docker/1.9.1 go/go1.4.2 git-commit/a34a1d5 kernel/3.13.0-24-generic os/linux arch/amd64"
"GET /v1/_ping HTTP/1.1" 404 470 "-" "docker/1.9.1 go/go1.4.2 git-commit/a34a1d5 kernel/3.13.0-24-generic ] "PUT /v1/repositories/ubuntu/ HTTP/1.1" 403 449 "-" "docker/1.9.1 go/go1.4.2 git-commit/a34a1d5 kernel/3.13.0-24-generic os/linux arch/amd64"