#javascript #arrays #string #function #reduce
#javascript #массивы #строка #функция #уменьшить
Вопрос:
Я пытаюсь использовать reduce для получения следующего вывода:
solution('abcdef') // should return ['ab', 'cd', 'ef']
если длина строки нечетная, мы должны преобразовать ее в четную и добавить символ ‘_’ (подчеркивание)
solution('abc') // should return ['ab', 'c_']
вот где я нахожусь до сих пор:
- моя функция if не работает, не совсем уверен, почему.
- Я получаю только до 2 строк, но не могу выйти за их пределы. Я думаю, что я заставляю результат становиться тем, что я хочу, но это не сработает, если у нас есть только 1 символ или 2, верно?
function solution(str){
if (str.lenght % 2!==0){str.concat('_')};
console.log(str)
const array = str.split(',');
const reducer = array.reduce((acc, curr, i, arr)=>{
return [...acc, curr[i] curr[i 1], curr[i 2] curr[i 3]]
},[])
return reducer
}
solution('helloworl')
любые подсказки и рекомендации о том, как решить проблему, были бы приятными!
большое спасибо
Комментарии:
1. использование функции reduce усложнит задачу 🙂
Ответ №1:
Это сделает это:
let splitTwos = (str) => str.match(/w{1,2}/g).map(e => e.length == 2?e:e "_")
console.log(splitTwos("abcde"))
console.log(splitTwos("abcdef"))
Ответ №2:
Я также думаю, что использование match будет лучше, поскольку вы просили reduce, вот моя реализация
function solution(str){
if (str.length % 2 !==0){
str ='_';
}
const strarray = str.split('');
temp='';
let res = strarray.reduce((acc,cur,i,arr)=>{
if(i%2 === 0){
temp =arr[i];
temp =arr[i 1];
acc.push(temp)
}
temp='';
return acc;
},[]);
return res;
}
console.log(solution('helloworl'));
Комментарии:
1. Да, согласитесь, что решение для сопоставления потрясающее. Я действительно использовал его, обдумывая проблему, но не смог добавить подчеркивание:(. Большое спасибо за вашу помощь, но, как и в предыдущем предложении, я думаю, что оно не совсем касается подчеркивания четной или нечетной длины, но мне понравилось, как вы решили функцию уменьшения. Это очень ясно!. Я новичок и действительно застрял в поиске решений.
2. Рад быть полезным, это должно сработать, я неправильно написал ‘length’!
Ответ №3:
Ответ Алана Омара, вероятно, лучший способ справиться с этим, но если вы настаиваете на использовании array reduce, вы могли бы сделать это так. Преобразуйте вашу строку в массив из отдельных символов и используйте reduce следующим образом.
Я бы не рекомендовал это, но это отвечает на ваш вопрос.
function solution(str){
if (str.length % 2 !== 0){
str = str.concat('_');
};
const arrayOfChars = str.split('');
const reducer = arrayOfChars.reduce(
(acc, curr, i, arr) => {
if(i % 2 !== 0){
acc[acc.length - 1] = acc[acc.length - 1] curr;
return acc;
}
return [...acc, curr];
},
[]
);
return reducer;
}
solution('helloworl');
Комментарии:
1. этот отличный, но проверяющий, по-прежнему не обрабатывает нечетные или четные длины строки для добавления подчеркивания, он добавляет его в обоих случаях. Спасибо, однако, за размышления о фактическом сокращении, очень помогает видеть реализации от других
2. То же, что и в другом ответе, я также неправильно написал length . Я думаю, что мы оба скопировали вашу опечатку