私は次のような値の配列を持っています:
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
};
私はそれを単一のステップで行うための構造化/構造化解決策があるとは思いません、いいえ。私は似たようなものが欲しかった この質問では 。老人 - :=
ストローマンの提案 は新しい 提案リスト に足を運んでいるようには見えないので、今のところこれに関する活動はあまり多くないと思います。
この回答 は、非常に優れた2ステップバージョンを示しています。
ただし、2つのステップの場合は、単純なオブジェクト初期化子を使用することもできます。
const arr = [1,2,3];
const obj = {
one: arr[0],
two: arr[1],
three: arr[2]
};
console.log(obj);
変数だけでなく、既存のオブジェクトにも構造化を割り当てることができます。
const arr = [1,2,3], o = {};
({0:o.one, 1:o.two, 2:o.three} = arr);
これは追加の変数なしで機能し、反復性が低くなります。ただし、非常に細かい場合は、2つの手順も必要です。
計算されたプロパティについて言及したので、これが役立つかどうかはわかりません!
分解すると、新しい変数を作成するか、既存の変数/プロパティに割り当てることができます。ただし、同じステートメントで宣言して再割り当てすることはできません。
const arr = [1, 2, 3],
obj = {};
[obj.one, obj.two, obj.three] = arr;
console.log(obj);
// { one: 1, two: 2, three: 3 }
これは少し異なる要件に答えますが、私はそのニーズへの答えを探してここに来ました、そしておそらくこれは同じような状況の他の人を助けるでしょう。
文字列の配列を指定すると、次のようになります。 two '、three:' three '}?
const b = a.map(a=>({ [a]: a })).reduce((p, n)=>({ ...p, ...n }),{})
構造化割り当てを使用すると、配列からオブジェクトに割り当てることができます
この例を試してください:
const numbers = {};
[numbers.one, numbers.two, numbers.three] = [1, 2, 3]
console.log(numbers)
私が同様の例を見つけた http://javascript.info/ の男の子へのクレジット。この例は、左側のセクションにある「すべてに割り当て」の http://javascript.info/destructuring-assignment にあります。
Lodashの _。zipObject を使用すると、かなり簡単に実現できます。
const obj = _.zipObject(['one','two','three'], [1, 2, 3]);
console.log(obj); // { one: 1, two: 2, three: 3 }