У меня возникли проблемы с пониманием деструктурирующего назначения в 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