我们说我有以下JavaScript数组:
var mainArray = ["thing1", "thing2", "thing3"];
对于每个这些数组元素,我想添加一个关联数组,所以它看起来像这样:
var mainArray = [
"thing1" {
key1 => value1,
key2 => value2,
key3 => value3
},
"thing2" {
key4 => value4,
key5 => value5,
key6 => value6
},
"thing3" {
key7 => value7,
key8 => value8,
key9 => value9
}
];
如何将每个关联数组推送到mainArray的每个元素上?
答案 0 :(得分:0)
我相信你想要一个包含对象的对象。
var myObj = {
"thing1": {
"key1": "someValue",
"key2": "someValue"
},
"thing2": {
// etc
}
};
alert(myObj.thing1.key1);
答案 1 :(得分:0)
使用JavaScript forEach
数组方法:
var mainArray = ["thing1", "thing2", "thing3"]
var mainObj = {};
mainArray.forEach(function(curr, ii) {
mainObj[curr] = { 'key1': 'value' + (ii * 3 + 1), 'key2': 'value' + (ii * 3 + 2), 'key3': 'value' + (ii * 3 + 3) }
})
console.log(mainObj)
输出:
{
"thing1": { "key1": "value1", "key2": "value2", "key3": "value3" },
"thing2": { "key1": "value4", "key2": "value5", "key3": "value6" },
"thing3": { "key1": "value7", "key2": "value8", "key3": "value9" }
}
可以通过mainObj.thing1
或者,使用JavaScript map
方法:
var mainArray = ["thing1", "thing2", "thing3"]
var newArray = mainArray.map(function(curr, ii) {
var obj = {}
obj[curr] = { 'key1': 'value' + (ii * 3 + 1), 'key2': 'value' + (ii * 3 + 2), 'key3': 'value' + (ii * 3 + 3) }
return obj
})
console.log(newArray)
输出:
[
{ "thing1": { "key1": "value1", "key2": "value2", "key3": "value3" } },
{ "thing2": { "key1": "value4", "key2": "value5", "key3": "value6" } },
{ "thing3": { "key1": "value7", "key2": "value8", "key3": "value9" } }
]
但是map
只返回一个数组。因此,访问元素就像newArray[0].thing1
,我觉得这很奇怪。
或者如果你想简单地将它们编织在一起:
var mainArray = ["thing1", "thing2", "thing3"]
var newArray = [];
mainArray.forEach(function(curr, ii, arr) {
newArray.push(curr,
{
'key1': 'value' + (ii * 3 + 1),
'key2': 'value' + (ii * 3 + 2),
'key3': 'value' + (ii * 3 + 3)
}
);
})
console.log(newArray)
输出:
[
"thing1", { "key1": "value1", "key2": "value2", "key3": "value3" },
"thing2", { "key1": "value4", "key2": "value5", "key3": "value6" },
"thing3", { "key1": "value7", "key2": "value8", "key3": "value9" }
]
答案 2 :(得分:0)
你可以这样做:
var mainArray = {"thing1":{}, "thing2":{}, "thing3":{}};
mainArray.thing1[key1]=value1;
mainArray.thing1[key2]=value2;
我只添加了2个值,但您可以根据需要添加。
答案 3 :(得分:0)
JavaScript关联数组实际上只是对象。您可以使用类似以下内容来创建关联数组数组
function createObject(key1, var1, key2, var2, key3, var3) {
var newobj = {};
newobj[key1] = var1;
newobj[key2] = var2;
newobj[key3] = var3;
return newobj;
}
var a1 = [];
a1.push(createObject("var1", "a", "var2", "b", "var3", "c"));
a1.push(createObject("var4", "d", "var5", "e", "var6", "f"));
alert(a1[1].var4);
alert(a1[1]["var4"]);
alert(a1[0].var3);
alert(a1[0]["var3"]);
这会警告" d"两次,然后" c"两次。
答案 4 :(得分:0)
这是我的尝试:
function objectify(keys, values){
return keys.reduce(function(obj, key, i){
obj[key] = values[i];
return obj
}, {});
}
示例电话:
objectify(
['a','b','c'],
[{k:1, l:2, m:3},{k:4, l:5, m:6},{k:7, l:8, m:9}]
);