JavaScript动态创建具有多个属性的对象

时间:2015-12-09 17:27:09

标签: javascript jquery

我正在尝试从数组中动态创建一个链式JS对象,有人知道如何实现这个目标吗?

更新

我可能有value.dog.cat = 'hello',我想访问该变量。

/ UPDATE

item = ['dog', 'cat']

如何动态创建:

value['dog']['cat']

任何香草JS或jQuery都会很酷。

我无法解决这个问题,因为如果我做了一个循环,例如:

new_value = {};
for (var i = 0; i < item.length(); i++) {
  new_value += [item[i]; // This doesn't make sense
}

5 个答案:

答案 0 :(得分:2)

使用Array.prototype.reduce创建对象或获取值

&#13;
&#13;
var itemArray = ['dog', 'cat'];

var itemObject = {};

itemArray.reduce(function(a, b) {
  if (!a[b]) {
    a[b] = {};
  }
  return a[b];
}, itemObject);

console.log(itemObject);

itemObject.dog.cat = 'test';
var value = itemArray.reduce(function(a, b) {
  return a[b];
}, itemObject);

console.log(value);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

如果我已经理解了这个问题,那么

var new_value = {};
for (var i = 1; i < item.length; i++) 
{
  new_value[item[i-1]] = item[i]; 
}

答案 2 :(得分:1)

只需要循环。简单的方法是减少。

&#13;
&#13;
var details = {
    dog : {
       cat : "hello world"
    }
};

var item = ['dog', 'cat'];

var value = item.reduce( function (prev, cur) {
                return prev[cur]; //|| {}; Might want to include the commented out part if keys might not be defined
            }, details);

console.log(value);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

如果value是对象,而value.dog也是具有属性cat的对象,则您确实可以value.dog.cat访问value['dog']['cat']。对象的属性可以作为字符串索引访问,你基本上是正确的。我在您的问题中看到的唯一问题是您首先将属性分配到new_value的方式。

答案 4 :(得分:0)

只需使用Array.prototype.forEach()

即可
  

forEach()方法每个数组元素执行一次提供的函数。

&#13;
&#13;
function setObject(o, p, v) {
    p.forEach(function (a, i, aa) {
        if (i === aa.length - 1) {
            o[a] = v;
        } else {
            o[a] = o[a] || {};
            o = o[a];
        }
    });
}

var item = ['dog', 'cat'],
    value = {};

setObject(value, item, 'hello') 
document.write(value.dog.cat);
document.write('<pre>' + JSON.stringify(value, 0, 4) + '</pre>');
&#13;
&#13;
&#13;