JavaScript 1.7 の Mozilla の変更ログに見られるように、彼らは構造化代入を追加しました。悲しいことに、私は構文があまり好きではありません (なぜ a と b を 2 回書くのですか?):
var a, b;
[a, b] = f();
このようなものはもっと良かったでしょう:
var [a, b] = f();
それはまだ下位互換性があります。Python のような構造化には後方互換性がありません。
とにかく、私が思いついた JavaScript 1.5 の最良の解決策は次のとおりです。
function assign(array, map) {
var o = Object();
var i = 0;
$.each(map, function(e, _) {
o[e] = array[i++];
});
return o;
}
次のように機能します。
var array = [1,2];
var _ = assign[array, { var1: null, var2: null });
_.var1; // prints 1
_.var2; // prints 2
しかし、_ には意味がないので、これは本当に最悪です。名前を格納するのは単なる空のシェルです。しかし残念なことに、JavaScript にはポインターがないため、これが必要です。プラス面では、値が一致しない場合にデフォルト値を割り当てることができます。また、このソリューションは配列をスライスしようとしないことに注意してください。したがって、次のようなことはできません{first: 0, rest: 0}
。しかし、その動作が必要な場合は、簡単に実行できます。
より良い解決策は何ですか?