Как заменить определенный символ в массиве? - PullRequest
0 голосов
/ 28 сентября 2018

Можете ли вы дать мне подсказку, что я неправильно пытаюсь заменить символ пробела ('') на ('-').

Это мой код:

function hypernateAndLowerCase(strings)
{
  let newArray = [];
  for (let i = 0; i < strings.length; i++) { 
    if (strings[i].indexOf(' ')){
       strings[i].replace(' ', '-');

    }

    newArray.push(strings[i].toLowerCase());
  }
  return newArray;
}

console.log(hypernateAndLowerCase(['HELLO WORLD', 'HELLO YOU']));

Ответы [ 5 ]

0 голосов
/ 28 сентября 2018

Простое выполнение "strings[i].replace(' ', '-');" ничего не даст, вам нужно переназначить значение каждого strings[i].Так что замените strings[i].replace(' ', '-') на strings[i] = strings[i].replace(' ', '-');

0 голосов
/ 28 сентября 2018

Я создал скрипку в http://jsfiddle.net/o0bq2rhg/

function hypernateAndLowerCase(strings) {
    let newArray = [];
    for (let i = 0; i < strings.length; i++) {
        if (strings[i].indexOf(' ') > -1) {
            strings[i] = strings[i].replace(/ /g, '-');
        }

        newArray.push(strings[i].toLowerCase());
    }
    return newArray;
}

console.log(hypernateAndLowerCase(['HELLO WORLD', 'HELLO YOU']));

Вы должны сохранить результат замененной функции обратно в strings[i].Я заменил функцию на регулярное выражение, чтобы вы заменили все пробелы сразу: trings[i].replace(/ /g, '-');.Заменить только заменяет первое вхождение.

0 голосов
/ 28 сентября 2018

Вы можете упростить свою функцию до следующих

function hypernateAndLowerCase(strings) {
  return strings.map(v => v.replace(/ /g, "-").toLowerCase());
}

console.log(hypernateAndLowerCase(['HELLO WORLD', 'HELLO YOU']));
0 голосов
/ 28 сентября 2018

Вы можете использовать .map() и .replace() методы.Использование \s+ в регулярном выражении позволит вам заменить один или несколько пробелов дефисом.

let hypernateAndLowerCase = (data) => data.map(
    str => str.replace(/\s+/g, '-').toLowerCase()
);

console.log(hypernateAndLowerCase(['HELLO WORLD', 'HELLO YOU', 'HELLO   WORLD']));
0 голосов
/ 28 сентября 2018

.replace не изменяет исходную строку - строки являются неизменяемыми, поэтому вам придется явно назначить результат использования replace для его работы.Но .map здесь более уместно, поскольку вы хотите преобразовать один массив в другой:

function hypernateAndLowerCase(strings) {
  return strings.map(string => string.replace(' ', '-').toLowerCase());
}

console.log(hypernateAndLowerCase(['HELLO WORLD', 'HELLO YOU']));

Обратите внимание, что передача строки в .replace будет означать, что самое большее будет заменено только одно вхождение.Если вы хотите заменить все вхождения, используйте вместо этого глобальное регулярное выражение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...