2016-04-12 1 views
6

プロパティ名でスペースを含むオブジェクトの非構造化を使用できるかどうかは知りませんか?たぶんこれはできませんし、JavaScript記法が間違っていることに気付きましたが、サーバーのjsonレスポンスを変更することはできません。有効な変数名ではないプロパティ名を持つオブジェクトの破棄

var obj1 = {name: 'Mr Smith', age: 21}; 
//destructure 
var {name, age} = obj1; 
//name='Mr Smith' and age=21 

期待どおりに動作します。

しかし、私は次のオブジェクト構造を持っていれば、オブジェクトの破壊を使うことができますか?

var obj2 = {"my name": "Mr Jones", age: 22}; 
var {'my name', age} = obj2; 

これが不可能な場合は...

var {'my name' as name, age} = obj2; //name='Mr Jones'; 

おかげ

+0

[ES6オブジェクトな破壊と変化するターゲット変数]の可能な重複(https://stackoverflow.com/q/34904523/1048572) – Bergi

答えて

10

「として」あなたはそれを割り当てることができますように私は、構文のいくつかの並べ替えに変数を割り当てることができればいいだろうこの構文を使用して、有効な変数名:

var {"my name": myName, age} = obj2; 

// use myName here 
+0

グレート: - リテラルと非構造の両方 - あなたはコロン:を使用し、通常のオブジェクトの場合!ありがとう、あなたはそのようなプロパティ名を変更することができたことを認識していませんでした。タイプスクリプトのドキュメントでは、最初にチェックしておく必要があります。私の悪い.. https://www.typescriptlang.org/docs/handbook/variable-declarations.html – keano

+1

@keano [mdmの文書](https://developer.mozilla.org/ja/docs/Web/JavaScript)/Reference/Operators/Destructuring_assignment)もかなり良いです。少なくとも将来、誰かがここでそれを簡単に見つけることができます。 –

5

私が持っていた場合nプロパティ名に空白を含むオブジェクトは、オブジェクトの非構造化を使用することができますか?

はい、デストラクチャリングを使用できますが、識別子(変数名)にはいつでも割り当てることができます。スペースを許さないので、プロパティ名と識別子が同じである簡略構文を使用することはできません。

私は「と」のような構文のいくつかの並べ替えに変数を割り当てることができればいいだろう:

var {'my name' as name, age} = obj2; 

asは、モジュールのインポート/エクスポート用です。

var {'my name': name, age} = obj2; 
+0

私はモジュールをインポートするための 'as'キーワードを使用しました。私は、オブジェクトの構造を破壊するときに同様の構文があると思っていました...しかし、説明に感謝します:) – keano

+0

興味深いことに、これは分かりませんでした!残念ながら、PHPの 'extract()'と同様に、オブジェクトを動的に解体する方法はありませんか、それともありますか? –

+0

@IfediOkonkwo動的変数名はピタです。そして、実際にはJS(それらを持っています)(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/with) - しかしあなたは本当にこれを使いたくありません。計算されたプロパティ名を使い、既知の変数に分解する。 – Bergi

関連する問題