【问题标题】:Pushing an associative array onto each value of another array in Javascript在Javascript中将关联数组推送到另一个数组的每个值上
【发布时间】:2015-06-01 07:23:18
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

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

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

alert(myObj.thing1.key1);

【讨论】:

    【解决方案2】:

    使用JavaScriptforEach数组方法:

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

    【讨论】:

      【解决方案3】:

      你可以这样做:

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

      我只添加了 2 个值,但您可以根据需要添加任意数量。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          这是我的尝试:

          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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-04
            • 2017-07-06
            • 2013-01-14
            • 2016-07-03
            • 1970-01-01
            • 1970-01-01
            • 2020-08-23
            相关资源
            最近更新 更多