как ${c}
в этой строке интерполяция указывает на элементы в массиве
Это не так. c => `Hello ${c}!`
- это функция стрелки , получающая один аргумент (c
) за раз.
Если вы хотите поддерживать среды без интерполяции строк, вы должны написать
c => "Hello "+c+"!"
, чтоможет быть увеличен до c => {return "Hello "+c+"!";}
, чтобы подчеркнуть, что это очень компактная, но актуальная функция.
10 лет назад, без функций интерполяции и стрелок, вы написали бы
function(c){return "Hello "+c+"!";}
там.
Итак, как указывают другие ответы / комментарии, использование Array.from(someIterable,someFunction)
просто вызывает someFunction
для всех элементов someIterable
, собирая результаты в массив. Затем join()
объединяет элементы массива в одну строку. Так как ваш «итерируемый» уже массив, вы можете использовать вместо него Array.map(someFunction)
.
В некоторых вариациях также добавлено ведение журнала, в котором указывается длинный function(x)
:
const continents = ['Africa', 'America', 'Asia', 'Australia', 'Europe'];
const hellos1 = Array.from(continents,function(x){
console.log("processing element: "+x);
return "Hello "+x+"!";
});
console.log(hellos1.join(" "));
const hellos2 = continents.map(x => {return "Hello "+x+"!"});
console.log(hellos2.join()); // comma-separated
console.log(`1+2: ${1+2}, continents.length: ${continents.length}`);
Последняя строка показывает, что элемент ${...}
в интерполяции строк просто оценивает выражение внутри. Таким образом, c
из ${c}
в вопросе не является спецификатором формата, как \c
может быть в разных языках, это c
просто потому, что это имя аргумента, которое получает функция стрелки.