簡體   English   中英

將關聯數組推入Javascript中另一個數組的每個值

[英]Pushing an associative array onto each value of another array in Javascript

假設我有以下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的每個元素上?

我相信您想要一個包含對象的對象。

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

alert(myObj.thing1.key1);

使用JavaScript forEach數組方法:

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)

輸出:

{
    "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在這里。

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編織。

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" }
]

您可以這樣做:

var mainArray = {"thing1":{}, "thing2":{}, "thing3":{}};
mainArray.thing1[key1]=value1;
mainArray.thing1[key2]=value2;

我僅添加了2個值,但是您可以根據需要添加任意數量。

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”。

這是我的嘗試:

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

JSFiddle上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM