[1,2,3]
に変換する最も簡単な (1 行?) 方法は何{1:0, 2:0, 3:0}
ですか?
更新:もっと「機能的なスタイル」(1行、each
またはmap
など)で行うことをお勧めします
[1,2,3]
に変換する最も簡単な (1 行?) 方法は何{1:0, 2:0, 3:0}
ですか?
更新:もっと「機能的なスタイル」(1行、each
またはmap
など)で行うことをお勧めします
配列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; }, {});
var arr = [1,2,3];
var result = {};
for (var i=0, l=arr.length; i<l;i++) {
result[arr[i]] = 0;
}
これがほとんどのベストプラクティスに反しているとしても、これはきちんとしていて、何よりも、ワンライナーのようです
var foo = [1,2,3];
foo = eval('({' + foo.join(':0, ') + ':0 })' );
console.log( foo ); // Object {1=0, 2=0, 3=0}
(例のように)すべての値を0に設定して、配列をキー/値オブジェクトに変換したいだけの場合は、次を使用できます。
var hash = {};
[1,2,3].forEach(function(item) {
hash[item] = 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 倍高速になりました。