简体   繁体   English

将关联数组推入Javascript中另一个数组的每个值

[英]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数组方法:

JSFiddle here. JSFiddle在这里。

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: 或者,如果您只是想将它们编织在一起:

JSFiddle weave. JSFiddle编织。

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}]
);

Demo on JSFiddle JSFiddle上的演示

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM