1

a以前の値を含む単純なオブジェクトになるように変数を再構築するためのより良い解決策を考えられる人はいますか? 私はこのようにするのは嫌いです.1行の方が好きですが、それでも読みやすいものでなければなりません.

a = "somevalue"
b = "somekey"

tmp = a
a = {}
a[b] = tmp

言い換えると、望ましい(そして上記のコードから:実際の)結果は次のとおりです。

a = { "somekey": "somevalue" }

「somekey」と「somevalue」が実際に変数bであり、a.

4

5 に答える 5

4

あなたが今持っているのはこれを達成する方法です。

私が見ることができる唯一のクリーンアップは、各変数を単一の目的に縮小しようとすることです-とa交換するのではなく、値またはオブジェクトのいずれかを使用しますtmp

var k = "somekey";
var v = "somevalue";

var a = {};
a[k] = v;
于 2012-06-01T22:13:19.907 に答える
2

どうぞ...

(a = (b = [a, b, {}])[2])[b[1]] = b[0];

おすすめとは言えませんが。


これで少しは良くなったかな…

(a = (b = [a, b], {}))[b[1]] = b[0];

確かにあなたが持っているものより短くはありません。


少し読みやすいかもしれませんが、それでも短くなります

(b = [a, b], a = {})[b[1]] = b[0];
于 2012-06-01T22:26:41.297 に答える
1

obj = (a...) -> o={}; o[a[i]]=o[a[++i]] for i in [0...a.length]; oではどうmyObject = obj key1, val1, key2, val2ですか?

編集:タグからのCoffeeScriptを意味すると仮定しましたが、質問では実際には言及されておらず、残りの回答はJavaScriptにあります。完全を期すために、JavaScript のバージョンは次のとおりです。

function obj() {
  var o={}, i, l=arguments.length;
  for (i=0; i<l; i+=2) {
    o[arguments[i]] = o[arguments[i+1]];
  }
  return o;
}

var myObject = obj(key1, val1, key2, val2);
于 2012-06-03T15:32:17.550 に答える
0

次の式を使用すると、 LiveScriptが生成するものから盗まれa = {(b): a}ます。

a = "somevalue"
b = "somekey"

a = (ref = {}; ref[b] = a; ref)

まだ補助変数が必要ですが、非常に読みやすいIMOであり、今ではワンライナー= Dです

于 2012-06-02T15:58:01.243 に答える
0

試す:

tmp = a;
a = {
    b: tmp
}
于 2012-06-01T21:59:07.703 に答える