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

0

ネイティブメソッドはありません。

ここでは、それを達成する2つの方法を見つけることができます

最初のメソッド は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;
}

2 番目の方法 では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 に答える