Есть массив содержащий четные и нечетные числа:
const arr = [1, 2, 5, 6, 8, 9, 10, 23, 32, 12, 65, 8, 4, 3, 65, 43, 23, 22, 55, 43, 66];
Необходимо отфильтровать и изменить элементы так чтобы в итоге получился массив слов "boom" и "wow",
где "boom" - это было нечетным числом меньше 10,
а "wow" - это было нечетное число больше 10.
В итоге должен получиться массив:
["boom", "boom", "boom", "wow", "wow", "boom", "wow", "wow", "wow", "wow", "wow"]
Пробовал написать, получилось, но что то как то не очень то и красиво.
Можно ли как то реализовать это все по другому, более как то красиво?
Реализация через обычный цикл for
:const boom = arr => {
let result = [];
for (let i = 0; i < arr.length; i += 1) {
if (arr[i] % 2 !== 0) {
if (arr[i] < 10) {
result.push("boom");
} else {
result.push("wow");
}
}
}
return result;
};
Реализация при помощи функциональных методов:let result = arr.filter(item => {
if (item % 2 !== 0) {
return item;
}
}).map(item => {
if (item < 10) {
return "boom"
} else {
return "wow";
}
});
Можно написать это в компактном функциональном стиле?
Написал на Haskell:
boom arr = [if x < 10 then "boom" else "wow" | x <- arr, odd x]
Можно ли сделать что то подобное по компактности в JS. Нативного метода в JS как мне известно нет, который бы и фильтровал и изменял данные списка. Как написать такой метод с callback?