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

JavaScript动态创建具有多个属性的对象,javascript,jquery,Javascript,Jquery,我试图从一个数组中动态创建一个链式JS对象,有人知道我如何做到这一点吗 更新 item = ['dog', 'cat'] 我可能有value.dog.cat='hello',我想访问该变量 /UPDATE item = ['dog', 'cat'] 如何动态创建: value['dog']['cat'] 任何普通的JS或jQuery都很酷 我无法理解这一点,因为如果我做一个循环,例如: new_value = {}; for (var i = 0; i < item.length()

我试图从一个数组中动态创建一个链式JS对象,有人知道我如何做到这一点吗

更新

item = ['dog', 'cat']
我可能有
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
}
new_值={};
对于(var i=0;i
如果
value
是一个对象,并且
value.dog
也是一个具有属性
cat
的对象,那么您确实可以访问
value.dog.cat
作为
value['dog']['cat']
。对象的属性可以作为字符串索引进行访问,您基本上是对的。我在您的问题中看到的唯一问题是,您首先将属性分配给
新值的方式。

如果
是一个对象,并且
值。dog
也是一个具有属性
cat
的对象,y你确实可以访问
value.dog.cat
as
value['dog']['cat']
。对象的属性可以作为字符串索引进行访问,您基本上是对的。我在您的问题中看到的唯一问题是您首先将属性分配给
新值的方式。

如果我当时理解了这个问题的话

var new_value = {};
for (var i = 1; i < item.length; i++) 
{
  new_value[item[i-1]] = item[i]; 
}
var新值={};
对于(变量i=1;i
如果我当时理解了这个问题

var new_value = {};
for (var i = 1; i < item.length; i++) 
{
  new_value[item[i-1]] = item[i]; 
}
var新值={};
对于(变量i=1;i
用于创建对象或获取值

var itemArray=['dog','cat'];
var itemObject={};
reduce(函数(a,b){
如果(!a[b]){
a[b]={};
}
返回a[b];
},项目对象);
console.log(itemObject);
itemObject.dog.cat='test';
var value=itemArray.reduce(函数(a,b){
返回a[b];
},项目对象);
console.log(value);
用于创建对象或获取值

var itemArray=['dog','cat'];
var itemObject={};
reduce(函数(a,b){
如果(!a[b]){
a[b]={};
}
返回a[b];
},项目对象);
console.log(itemObject);
itemObject.dog.cat='test';
var value=itemArray.reduce(函数(a,b){
返回a[b];
},项目对象);

console.log(value);
只需循环即可。简单的方法是使用reduce

var详细信息={
狗:{
猫:“你好,世界”
}
};
变量项=['dog'、'cat'];
var值=项目减少(功能(上、当前){
return prev[cur];/| |{};如果可能没有定义键,则可能希望包含注释掉的部分
},详情);

console.log(value);
只需循环即可。简单的方法是使用reduce

var详细信息={
狗:{
猫:“你好,世界”
}
};
变量项=['dog'、'cat'];
var值=项目减少(功能(上、当前){
return prev[cur];/| |{};如果可能没有定义键,则可能希望包含注释掉的部分
},详情);
console.log(value);
只需使用

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

函数setObject(o、p、v){
p、 forEach(函数(a、i、aa){
如果(i==aa.length-1){
o[a]=v;
}否则{
o[a]=o[a]|{};
o=o[a];
}
});
}
变量项=['dog'、'cat'],
值={};
setObject(值,项“hello”)
document.write(value.dog.cat);
document.write(''+JSON.stringify(value,0,4)+'');
只需使用

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

函数setObject(o、p、v){
p、 forEach(函数(a、i、aa){
如果(i==aa.length-1){
o[a]=v;
}否则{
o[a]=o[a]|{};
o=o[a];
}
});
}
变量项=['dog'、'cat'],
值={};
setObject(值,项“hello”)
document.write(value.dog.cat);

document.write(''+JSON.stringify(value,0,4)+'');
那么您希望它一直都是一个对象吗?JSON最终应该是什么样子?是的,
value
是一个现有的对象,我想把它变成
value['dog']['cat']
例如,这样它将从
value
中获取正确的属性。那么,为什么不将其包括在问题中……好的,我添加了一个更新,您希望它一直是一个对象吗?JSON最终应该是什么样子?是的,
value
是一个现有的对象,我想将其转换为
value['dog'['cat']
例如,通过这种方式,它将从
值中获取正确的属性。那么,为什么不将其包括在问题中……好的,我添加了一个更新。对不起,我不清楚——我想从
值(JSON)中获取数据,如果有意义的话,不创建新对象?哦,那么数组提供字符串,字符串对应于对象中属性的名称?是的,我添加了一个更新,试图更清楚地解释它:)是的,对不起,我不清楚--我想从
(JSON)获取数据,如果有意义的话,不创建新对象?哦,那么数组提供了字符串,字符串与对象中属性的名称相对应?是的,我添加了一个更新,试图更清楚地解释:)您可能正在覆盖一些以前的属性。您可能正在覆盖一些以前的属性。