在Javascript中将关联数组推送到另一个数组的每个值

时间:2015-03-27 20:25:05

标签: javascript multidimensional-array associative-array key-value

我们说我有以下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的每个元素上?

5 个答案:

答案 0 :(得分:0)

我相信你想要一个包含对象的对象。

var myObj = {
  "thing1": {
    "key1": "someValue",
    "key2": "someValue"
  },
  "thing2": {
     // etc
  }
};

alert(myObj.thing1.key1);

答案 1 :(得分:0)

使用JavaScript forEach数组方法:

JSFiddle here.

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方法:

另一个JSFiddle here.

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,我觉得这很奇怪。


或者如果你想简单地将它们编织在一起:

JSFiddle weave.

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

Demo on JSFiddle