Сопоставьте массив строк с массивом объектов [duplicate]

В меню Eclipse Окно -> Предпочтения -> Java -> Компилятор также проверяет «Настроить проект Настройки ".

Если у вас есть ошибка с той же версией Java: попробуйте вручную удалить папку сборки вашего проекта. Затем перезапустите Eclipse.

467
задан hippietrail 20 April 2015 в 09:03
поделиться

3 ответа

Вы должны обернуть литерал возвращаемого объекта в круглые скобки. В противном случае фигурные скобки будут считаться обозначающими тело функции. Следующие работы:

p => ({ foo: 'bar' });

Вам не нужно вставлять какое-либо другое выражение в круглые скобки:

p => 10;
p => 'foo';
p => true;
p => [1,2,3];
p => null;
p => /^foo$/;

и т. Д.

Ссылка: MDN - литералы возвращаемого объекта

778
ответ дан str 22 August 2018 в 06:29
поделиться
  • 1
    Мне любопытно почему парнеры имеют значение. – wrschneider 18 January 2017 в 03:28
  • 2
    @wrschneider, потому что без парсера js parser думает, что его тело функции, а не объект, и foo - метка – alexpods 18 January 2017 в 14:31
  • 3
    Обтекание символом объекта в круглых скобках означает, что фигурные скобки являются объектным литералом вместо тела функции. – Akshay Gundewar 26 January 2017 в 05:40
  • 4
    @wrschneider более конкретно, с точки зрения узлов AST, с использованием скобок обозначает оператор выражения, в котором может существовать выражение объекта, тогда как по умолчанию фигурные скобки интерпретируются как оператор блока. – Patrick Roberts 20 May 2017 в 07:43
  • 5

Если тело функции стрелки завернуто в фигурные скобки, оно не возвращается неявно. Оберните объект в круглые скобки. Это будет выглядеть примерно так.

p => ({ foo: 'bar' })

Обернув тело в parens, функция вернет { foo: 'bar }.

Надеюсь, это решит вашу проблему. Если нет, я недавно написал статью о функциях Arrow, которая более подробно описывает ее. Надеюсь, вы сочтете это полезным. Функции стрелок Javascript

6
ответ дан Paul McBride 22 August 2018 в 06:29
поделиться
  • 1
    Проводка ссылки на ваш собственный блог проблематична. Пожалуйста, прочитайте Как не спамер . – tripleee 9 August 2017 в 08:50
  • 2
    Совпадение с вашей собственной библиотекой или учебным пособием не является хорошим ответом. Обращаясь к нему, объясняя, почему он решает проблему, предоставляя код о том, как это сделать и отказываясь от того, что вы написали, он дает лучший ответ. См.: Что означает «хорошая» самореклама? – Suraj Rao 9 August 2017 в 08:50
  • 3
    Неужели я действительно ответил на вопрос в первом предложении? Проверив руководство, как не быть спамером, я чувствую, что мой ответ попадает в руководящие принципы. – Paul McBride 9 August 2017 в 08:54
  • 4
    Вам нужно четко указать, что это ваш блог. – Suraj Rao 9 August 2017 в 08:56
  • 5
    Сейчас я отредактирую. Благодаря! – Paul McBride 9 August 2017 в 09:00

Вы можете задаться вопросом, почему синтаксис действителен (но не работает как ожидалось):

var func = p => { foo: "bar" }

Это из-за синтаксиса ярлыков JavaScript :

Итак, если вы переведёте вышеуказанный код на ES5, он должен выглядеть так:

var func = function (p) {
  foo:
  "bar"; //obviously no return here!
}
43
ответ дан Petr Odut 22 August 2018 в 06:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: