Javascript 动态添加到对象并创建(如果未定义)?

Javascript 动态添加到对象并创建(如果未定义)?,javascript,object,Javascript,Object,我很难搜索/解释我要做的事情,但我想向JavaScript对象添加数据。我想将数据添加到的索引可能存在,也可能不存在,而且该索引名称将是动态的,因此我不能一开始就定义所有对象 假设用户单击我网站上的链接时,我正在向对象添加内容。我已经定义了我的对象: exampleObject = {}; 如果用户单击水果链接,我想将水果添加到对象中。我通常会这样做: exampleObject.fruit = {}; exampleObject.fruit.strawberry = true; 我的问题是

我很难搜索/解释我要做的事情,但我想向JavaScript对象添加数据。我想将数据添加到的索引可能存在,也可能不存在,而且该索引名称将是动态的,因此我不能一开始就定义所有对象

假设用户单击我网站上的链接时,我正在向对象添加内容。我已经定义了我的对象:

exampleObject = {};
如果用户单击水果链接,我想将水果添加到对象中。我通常会这样做:

exampleObject.fruit = {};
exampleObject.fruit.strawberry = true;
我的问题是,我不想在用户单击下一个水果时覆盖对象。我需要检查对象是否已定义,然后添加到其中:

if ( typeof exampleObject.fruit === 'undefined' ){
    exampleObject.fruit = {};
    exampleObject.fruit.cherry = true;
} else {
    exampleObject.fruit.cherry = true;
}

我想知道的是,是否有一个速记的方式做上述条件?我希望能有一艘客轮,因为我会经常这样做。我的下一个想法是为它创建一个函数,但我不想重新发明轮子或限制自己(比如,如果我想在这个对象中使用一个数组来将所有结果推到一个索引中)。在这种情况下,jQuery是一个选项,但不一定是我的首选。

基于您所说的索引名称将是动态的,请使用方括号调整对象键/索引:

exampleObject = exampleObject || {};
exampleObject.fruit = exampleObject.fruit || {};
exampleObject.fruit.cherry = true;
function addFruit (name) {

  exampleObject = exampleObject || {};
  exampleObject.fruit = exampleObject.fruit || {};

  if (typeof exampleObject.fruit[name] == 'undefined')
    exampleObject.fruit[name] = true;

}

根据您所说的索引名称将是动态的,请使用方括号调整对象键/索引:

function addFruit (name) {

  exampleObject = exampleObject || {};
  exampleObject.fruit = exampleObject.fruit || {};

  if (typeof exampleObject.fruit[name] == 'undefined')
    exampleObject.fruit[name] = true;

}

我会选择函数路径,这取决于新索引的极端程度。这将允许您一次性分配类别和项目

function checkOrAddKey(key, newItem) {
  if(!exampleObject.hasOwnProperty(key)) {
    exampleObject[key] = {};
    exampleObject[key][newItem] = true;
  }
  else {
    exampleObject[key][newItem] = true;
  }
}

checkOrAddKey('fruit', 'apple');
checkOrAddKey('fruit', 'banana');
checkOrAddKey('scone', 'cinnamon');

//exampleObject: { fruit: { apple: true, banana: true }, scone: { cinnamon: true } }

我会选择函数路径,这取决于新索引的极端程度。这将允许您一次性分配类别和项目

function checkOrAddKey(key, newItem) {
  if(!exampleObject.hasOwnProperty(key)) {
    exampleObject[key] = {};
    exampleObject[key][newItem] = true;
  }
  else {
    exampleObject[key][newItem] = true;
  }
}

checkOrAddKey('fruit', 'apple');
checkOrAddKey('fruit', 'banana');
checkOrAddKey('scone', 'cinnamon');

//exampleObject: { fruit: { apple: true, banana: true }, scone: { cinnamon: true } }

这与我想用函数做的事情是一致的——感谢你的回答。我把你的回答作为我的出发点(用Brad建议的动态索引)让它工作起来。谢谢。这正是我想用这个函数做的——感谢你的回答。我把你的回答作为我的出发点(用Brad建议的动态索引)让它工作起来。谢谢