2

[1,2,3]に変換する最も簡単な (1 行?) 方法は何{1:0, 2:0, 3:0}ですか?

更新:もっと「機能的なスタイル」(1行、eachまたはmapなど)で行うことをお勧めします

4

5 に答える 5

4

配列reduceメソッドでは、メソッドに 2 番目の引数を渡すことができますinitialValue。オブジェクトを initialValue として送信し、配列の現在の項目に設定されたキーを持つプロパティを割り当てて、反復を通じてそれを返し続けることができます。型強制に注意してください。JavaScript では、プロパティ キーは文字列でなければなりません。したがってtoString、この場合、メソッドは配列のアイテムに対して呼び出されます。

var hash = array.reduce(function(obj,cur){
   obj[cur]=0;
   return obj;
},{});

デモ

ワンライナーの形で:

var hash = array.reduce(function (obj, cur) { obj[cur] = 0; return obj; }, {});

于 2012-12-18T14:48:48.417 に答える
0
var arr = [1,2,3];

var result = {};
for (var i=0, l=arr.length; i<l;i++) {
    result[arr[i]] = 0;
}
于 2012-12-18T14:45:50.630 に答える
0

これがほとんどのベストプラクティスに反しているとしても、これはきちんとしていて、何よりも、ワンライナーのようです

var foo = [1,2,3];

foo = eval('({' + foo.join(':0, ') + ':0 })' );

console.log( foo ); // Object {1=0, 2=0, 3=0}
于 2012-12-18T14:56:21.793 に答える
0

(例のように)すべての値を0に設定して、配列をキー/値オブジェクトに変換したいだけの場合は、次を使用できます。

var hash = {};
[1,2,3].forEach(function(item) {
  hash[item] = 0;
});
于 2012-12-18T14:48:09.233 に答える
0

個人的には、必要なものをコーディングすることの何が問題なのかわかりません:

function objectWithKeysAndValue(keys, value)
{
    var o = {};

    for (var i = 0, n = keys.length; i != n; ++i) {
        o[keys[i]] = value;
    }

    return o;
}

console.log(objectWithKeysAndValue([1,2,3], 0);

好奇心から、エンジニアの回答に対してこの関数を実行したところ、2 倍高速になりました。

結果

于 2012-12-18T14:48:59.703 に答える