【问题标题】:Best Method to Merge Javascript Arrays into an Object Literal将 Javascript 数组合并为对象文字的最佳方法
【发布时间】:2013-06-02 03:52:33
【问题描述】:

我正在寻找一种将 2 个数组合并为文字对象的原生 JavaScript 方法。

转动这个:

var x = ["blue", "yellow", "red", "green", "brown", "grey", "gray", "orange"]; 
var y = ["james", "john", "robert", "michael", "william", "david", "richard", "wayne"];

进入这个:

{
"obj" : {
    "blue" : "james",
    "yellow" : "john",
    "red" :  "robert", 
    "green" : "michael", 
    "brown" : "william", 
    "gray" : "david", 
    "grey" : "richard", 
    "orange" : "wayne"
  }
}

【问题讨论】:

  • 数组的大小总是一样的?
  • “我在找...” - 不,你是在要求What have you tried so far?
  • @BrunoLM 从理论上讲,除非某些东西完全横向移动,否则数组将始终具有相同的大小。
  • @nnnnnn 感谢您的链接。是的,我应该发布消息来源和我被卡住的地方。括号符号“obj[a[i]]”是我完全忽略的。 +1 好读。

标签: javascript arrays javascript-objects object-literal


【解决方案1】:

你可以用一个相当简单的循环来做到这一点:

var result = {obj: {}};
for (var i=0; i<x.length; i++) {
    result.obj[x[i]] = y[i];
}

这假定xy 的长度始终相同。如果不是,您只需要添加更多代码来检查长度即可。

【讨论】:

    【解决方案2】:
    var x = ["blue", "yellow", "red", "green", "brown", "grey", "gray", "orange"]; 
    var y = ["james", "john", "robert", "michael", "william", "david", "richard", "wayne"];
    
    function merge2array(a, b) {
        var obj = {};
        var l = a.length;
        var i;
    
        for (i = 0; i < l; i++) {
            obj[a[i]] = b[i];
        }
    
        return obj;
    }
    
    var obj = merge2array(x, y);
    console.log(obj);
    

    这将返回这个对象:

    {
        "blue" : "james",
        "yellow" : "john",
        "red" :  "robert", 
        "green" : "michael", 
        "brown" : "william", 
        "gray" : "david", 
        "grey" : "richard", 
        "orange" : "wayne"
    }
    

    然后你可以构建你想要的对象:

    var r = { obj: obj };
    console.log(r);
    

    【讨论】:

    • 是的,这很棒。谢谢!
    【解决方案3】:

    没有本地方法。

    Here you can find two ways of achieving it

    第一种方法m1 将验证数组的长度,如果不匹配则会抛出异常。

    function m1(keys, values)
    {
        // in case the arrays have different sizes
        if (keys.length != values.length)
            throw new Error("Arrays are not of the same size");
    
        var result = {};
        for (var i in keys)
        {
            result[keys[i]] = values[i];
        }
    
        return result;
    }
    

    第二种方法,m2,将允许您拥有比值更多的键,并用 null 填充缺失的值。

    function m2(keys, values)
    {
        // alternative handling for different sizes
        if (keys.length < values.length)
            throw new Error("You can't have more values than keys");
    
        var result = {};
        for (var i in keys)
        {
            var val = null;
            if (i < values.length)
                val = values[i];
    
            result[keys[i]] = val;
        }
    
        return result;
    }
    

    两种方法都返回一个对象,要完全按照您的描述拥有一个对象,您可以这样做:

    var x = {};
    x.obj = m1([1, 2, 3], ["a", "b", "c"]);
    

    对于compact version(没有验证),您可以使用:

    function m(k,v){r={};for (i in k)r[k[i]]=v[i];return r}
    

    用法:

    var x = { obj: m([1,2],["A","B"]) };
    

    m 更改为所需的函数名称。

    参考

    【讨论】:

      【解决方案4】:

      最快(使用while--,缓存长度)/最短方式?

      var a=['blue','yellow','red','green','brown','grey','gray','orange'],
      b=['james','john','robert','michael','william','david','richard','wayne'],
      c=[],d=a.length;while(d--)c[a[d]]=b[d];
      var x={obj:c};
      

      也作为函数(c&d 是占位符,所以你不需要写 var 和保存字节) 函数的名称可以放在'function'的前面或后面......随便

      function(a,b,c,d){c=[],d=a.length;while(d--)c[a[d]]=b[d];return c}
      

      【讨论】:

        猜你喜欢
        • 2011-03-29
        • 2021-03-08
        • 2021-04-21
        • 2015-09-23
        • 1970-01-01
        • 2014-03-01
        • 1970-01-01
        • 2017-06-09
        • 2021-11-17
        相关资源
        最近更新 更多