[英]Pushing an associative array onto each value of another array in Javascript
Let's say I have the following JavaScript array: 假设我有以下JavaScript数组:
var mainArray = ["thing1", "thing2", "thing3"];
And for each of these array elements, I want to add an associative array, so that it looks something like this: 对于这些数组元素中的每一个,我都想添加一个关联数组,使其看起来像这样:
var mainArray = [
"thing1" {
key1 => value1,
key2 => value2,
key3 => value3
},
"thing2" {
key4 => value4,
key5 => value5,
key6 => value6
},
"thing3" {
key7 => value7,
key8 => value8,
key9 => value9
}
];
How would I push each associative array onto each element of mainArray? 如何将每个关联数组推入mainArray的每个元素上?
I believe you want an object containing objects. 我相信您想要一个包含对象的对象。
var myObj = {
"thing1": {
"key1": "someValue",
"key2": "someValue"
},
"thing2": {
// etc
}
};
alert(myObj.thing1.key1);
Using JavaScript forEach
array method: 使用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)
Outputs: 输出:
{
"thing1": { "key1": "value1", "key2": "value2", "key3": "value3" },
"thing2": { "key1": "value4", "key2": "value5", "key3": "value6" },
"thing3": { "key1": "value7", "key2": "value8", "key3": "value9" }
}
And can be accessed by mainObj.thing1
并且可以通过mainObj.thing1
访问
Alternatively, using JavaScript map
method: 或者,使用JavaScript map
方法:
Another JSFiddle here. 另一个JSFiddle在这里。
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)
Outputs: 输出:
[
{ "thing1": { "key1": "value1", "key2": "value2", "key3": "value3" } },
{ "thing2": { "key1": "value4", "key2": "value5", "key3": "value6" } },
{ "thing3": { "key1": "value7", "key2": "value8", "key3": "value9" } }
]
However map
only returns an array. 但是map
只返回一个数组。 Therefore accessing elements would be like newArray[0].thing1
which I think is odd. 因此,访问元素就像newArray[0].thing1
,我认为这很奇怪。
Or if you are wanting to simply weave them together: 或者,如果您只是想将它们编织在一起:
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)
Outputs: 输出:
[
"thing1", { "key1": "value1", "key2": "value2", "key3": "value3" },
"thing2", { "key1": "value4", "key2": "value5", "key3": "value6" },
"thing3", { "key1": "value7", "key2": "value8", "key3": "value9" }
]
You can do it like that: 您可以这样做:
var mainArray = {"thing1":{}, "thing2":{}, "thing3":{}};
mainArray.thing1[key1]=value1;
mainArray.thing1[key2]=value2;
I added only 2 values, but you can add as much as you need. 我仅添加了2个值,但是您可以根据需要添加任意数量。
JavaScript associative arrays are really just objects. JavaScript关联数组实际上只是对象。 You can use something like the following to create an array of associative arrays, 您可以使用类似以下内容的方法来创建关联数组的数组,
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"]);
This will alert "d" twice and then "c" twice. 这将两次提示“ d”,然后两次提示“ c”。
Here's my attempt: 这是我的尝试:
function objectify(keys, values){
return keys.reduce(function(obj, key, i){
obj[key] = values[i];
return obj
}, {});
}
Example call: 示例调用:
objectify(
['a','b','c'],
[{k:1, l:2, m:3},{k:4, l:5, m:6},{k:7, l:8, m:9}]
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.