В JavaScript вы можете присоединиться к массиву строк, например:
fruits = ["orange", "apple", "banana"];
joined = fruits.join(", ");
console.log(joined)
// "orange, apple, banana"
Как это сделать в ReasonML?
В JavaScript вы можете присоединиться к массиву строк, например:
fruits = ["orange", "apple", "banana"];
joined = fruits.join(", ");
console.log(joined)
// "orange, apple, banana"
Как это сделать в ReasonML?
Вы можете использовать Js.Array.joinWith
:
let fruits = [|"orange", "apple", "banana"|];
let joined = Js.Array.joinWith(", ", fruits);
Js.log(joined);
// "orange, apple, banana"
Js.Array.join
не рекомендуется, поскольку он компилируется в JS array.join()
, в котором в качестве разделителя используется запятая.
- person tokland; 11.07.2018
Js.Array.join
из своего ответа.
- person noziar; 18.07.2018
Преобразование массива в строку объединенных значений звучит как задание для Array.fold_left, однако выполняется
Array.fold_left((a, b) => a ++ "," ++ b, "", fruits);
производит "апельсин, яблоко, банан".
В идеале начальное значение для свертки (второй аргумент) должно быть первым элементом в массиве и фактически используемым массивом, это позволяет избежать начальной запятой. К сожалению, это нелегко сделать с массивами, но со списками:
let fruitList = Array.to_list(fruits);
let joined = List.fold_left((a, b) => a ++ "," ++ b, List.hd(fruitList), List.tl(fruitList));
/*joined = "orange,apple,banana"*/
Вот как реализовать вашу собственную join
функцию в ReasonML:
let rec join = (char: string, list: list(string)): string => {
switch(list) {
| [] => raise(Failure("Passed an empty list"))
| [tail] => tail
| [head, ...tail] => head ++ char ++ join(char, tail)
};
};
При этом Js.log(join("$", ["a", "b", "c"]))
дает вам "a$b$c"
, как и JavaScript.