При использовании функций ES6 вы можете опустить ()
параметров, только если вы используете 1 параметр.То, что вы сделали, на самом деле закрыло ваш map
еще до того, как вы добрались до жирной стрелки (=>
).Ваша ошибка говорит, что он не понимает ,
в map(item, i)
, так как map
не принимает второй параметр.Вот небольшая разбивка, за которой следует некоторый оптимизированный код для вашей проблемы.
Базовая функция ES6 - () => {}
, где параметры заключаются в скобки ()
, а код - между{}
.
Вот основная функция суммы: (a, b) => { return a+b }
.Так как здесь только одна строка и это возвращаемое значение, вы можете опустить скобки {}
.т.е. (a, b) => a+b
Вот функция приветствия: (name) => { return 'hello ' + name }
.Поскольку он имеет только 1 параметр, вы можете использовать name => { return 'hello ' + name }
.Или даже используя приведенное выше правило: name => 'hello ' + name
.
Эти ярлыки могут сделать код более простым для написания, но, возможно, более трудным для понимания.Если вы сомневаетесь, просто всегда держите скобки ()
, чтобы избежать путаницы.
const obj = {
1: {id: 1, colors:["red", "blue"]},
2: {id: 2, colors:["green", "yellow"]}
}
for (key in obj) {
const item = obj[key];
item.colors.map((color, i) => {
console.log( `<li key=${item.id}-${i}>${color}</li>`)
// Below lines are commented out because StackOverflow
// does not process JSX tags. Just uncomment and remove
// the console.log above
// return (
// <li key={item.id}-${i}>{color}</li>
// )
});
}
ПРИМЕЧАНИЯ: Вместо того, чтобы использовать Object.keys
, чтобы получить массив ключей, я просто использую цикл for...in
, чтобы выполнить то же самое.
Документация
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in