4

CoffeeScriptでの破壊的な割り当てを理解するのに問題があります。ドキュメントには、割り当て中にオブジェクトの名前を変更してソースオブジェクトを投影(つまり、マップ、変換、変換)できることを示唆しているように見えるいくつかの例が含まれています。

に投影しようとしa = [ { Id: 1, Name: 'Foo' }, { Id: 2, Name: 'Bar' } ]b = [ { x: 1 }, { x: 2 } ]います。私は成功せずに次のことを試みました。私は明らかに何かを誤解しました。これが可能かどうか誰かが説明できますか?

戻らない私の貧しい試み[ { x: 1 }, { x: 2 } ]

a = [ { Id: 1, Name: 'Foo' }, { Id: 2, Name: 'Bar' } ]

# Huh? This returns 1.
x = [ { Id } ] = a

# Boo! This returns [ { Id: 1, Name: 'Foo' }, { Id: 2, Name: 'Bar' } ] 
y = [ { x: Id } ] = a

# Boo! This returns [ { Id: 1, Name: 'Foo' }, { Id: 2, Name: 'Bar' } ]
z = [ { Id: x } ] = a

CoffeeScriptの並列割り当ての例

theBait   = 1000
theSwitch = 0

[theBait, theSwitch] = [theSwitch, theBait]

この例は、変数の名前を変更できることを意味していると理解しています。この場合は、スワップを実行するために使用されます。

CoffeeScriptの任意のネストの例

futurists =
  sculptor: "Umberto Boccioni"
  painter:  "Vladimir Burliuk"
  poet:
    name:   "F.T. Marinetti"
    address: [
      "Via Roma 42R"
      "Bellagio, Italy 22021"
    ]

{poet: {name, address: [street, city]}} = futurists

この例は、配列の要素を変数に割り当てることを含む、任意のオブジェクトからのプロパティの選択を定義するものとして理解しています。

更新:jhのソリューションを使用してネストされたオブジェクトの配列をフラット化する

a = [ 
  { Id: 0, Name: { First: 'George', Last: 'Clinton' } },
  { Id: 1, Name: { First: 'Bill', Last: 'Bush' } },
]

# The old way I was doing it.
old_way = _.map a, x ->
    { Id: id, Name: { First: first, Last: last } } = x
    { id, first, last }

# Using thejh's solution...
new_way = ({id, first, last} for {Id: id, Name: {First: first, Last: last}} in a)

console.log new_way
4

2 に答える 2

3

b = ({x} for {Id: x} in a)作品:

coffee> a = [ { Id: 1, Name: 'Foo' }, { Id: 2, Name: 'Bar' } ]
[ { Id: 1, Name: 'Foo' },
  { Id: 2, Name: 'Bar' } ]
coffee> b = ({x} for {Id: x} in a)
[ { x: 1 }, { x: 2 } ]
coffee>
于 2011-11-16T20:18:00.867 に答える
2

CoffeeScript Cookbookは、あなたとまったく同じ問題を解決します-解決策はマップです:

b = a.map (hash) -> { x: hash.id }

またはリスト内包表記

c = ({ x: hash.id } for hash in a)

このフィドルは、CoffeScriptホームページでオンラインで確認できます(console.infoを使用して結果を表示します)。

編集:

aそれを破壊的にするには、マップされた変数をそれ自体に割り当てるだけです。

a = a1 = [ { Id: 1, Name: 'Foo' }, { Id: 2, Name: 'Bar' } ]
a = a.map (hash) -> { x: hash.Id }
console.info a;
a1 = ({ x: hash.Id } for hash in a1)
console.info a1;
于 2011-11-16T20:14:51.933 に答える