web-dev-qa-db-ja.com

配列をオブジェクトプロパティキーに分解

私は次のような値の配列を持っています:

const arr = [1,2,3];

構造化を使用して次の出力を作成する方法はありますか?そうでない場合、ES6(またはそれ以降)でこれを行う最も簡単な方法は何ですか?

const obj = {
    one: 1,
    two: 2,
    three: 3
};

私はこれを試しましたが、これは計算されたキーの構文なので、うまくいかないと思います:

const arr = [1,2,3];
const obj = {
  [one, two, three] = arr
};
18
CodingIntrigue

私はそれを単一のステップで行うための構造化/構造化解決策があるとは思いません、いいえ。私は似たようなものが欲しかった この質問では 。老人 - :=ストローマンの提案 は新しい 提案リスト に足を運んでいるようには見えないので、今のところこれに関する活動はあまり多くないと思います。

この回答 は、非常に優れた2ステップバージョンを示しています。

ただし、2つのステップの場合は、単純なオブジェクト初期化子を使用することもできます。

const arr = [1,2,3];
const obj = {
  one: arr[0],
  two: arr[1],
  three: arr[2]
};
console.log(obj);
8
T.J. Crowder

変数だけでなく、既存のオブジェクトにも構造化を割り当てることができます。

const arr = [1,2,3], o = {};    
({0:o.one, 1:o.two, 2:o.three} = arr);

これは追加の変数なしで機能し、反復性が低くなります。ただし、非常に細かい場合は、2つの手順も必要です。

計算されたプロパティについて言及したので、これが役立つかどうかはわかりません!

28
user6445533

分解すると、新しい変数を作成するか、既存の変数/プロパティに割り当てることができます。ただし、同じステートメントで宣言して再割り当てすることはできません。

const arr = [1, 2, 3],
    obj = {};

[obj.one, obj.two, obj.three] = arr;
console.log(obj);
// { one: 1, two: 2, three: 3 }
9
adambullmer

これは少し異なる要件に答えますが、私はそのニーズへの答えを探してここに来ました、そしておそらくこれは同じような状況の他の人を助けるでしょう。

文字列の配列を指定すると、次のようになります。 two '、three:' three '}?

const b = a.map(a=>({ [a]: a })).reduce((p, n)=>({ ...p, ...n }),{})

3
corse32

構造化割り当てを使用すると、配列からオブジェクトに割り当てることができます

この例を試してください:

const numbers = {};

[numbers.one, numbers.two, numbers.three] = [1, 2, 3]

console.log(numbers)

私が同様の例を見つけた http://javascript.info/ の男の子へのクレジット。この例は、左側のセクションにある「すべてに割り当て」の http://javascript.info/destructuring-assignment にあります。

1
user615274

Lodashの _。zipObject を使用すると、かなり簡単に実現できます。

const obj = _.zipObject(['one','two','three'], [1, 2, 3]);
console.log(obj); // { one: 1, two: 2, three: 3 }
0
Technotronic