1

我正在寻找一种将 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"
  }
}
4

4 回答 4

4

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

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

这假设xy总是相同的长度。如果不是,您只需要添加更多代码来检查长度。

于 2013-06-02T03:55:45.600 回答
3
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);
于 2013-06-02T03:57:45.040 回答
0

最快(使用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}
于 2013-06-04T00:14:10.333 回答
0

没有本地方法。

在这里您可以找到两种实现方式

第一种方法,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"]);

对于紧凑版本(没有验证),您可以使用:

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为所需的函数名称。

参考

于 2013-06-02T04:39:10.927 回答