Заменить экземпляры символа "*" на элементы в массиве - JavaScript - PullRequest
0 голосов
/ 23 апреля 2019

Я знаю, что мне понадобится пустой, пустой массив, и вставлю символы из предложения в массив, если они не являются звездочками.

Я думаю, это поможет мне понять, что делать, если я действительно хочу перебрать элементы массива и использовать их в качестве замены.

function replaceAsterisk(sentence, newWords) {

  let newArray = [];

  let character = sentence.split("");

  console.log(character);

  // if the character is not an asterisk, push it into the new array
  if (character !== "*") {
    newArray.push(character);
  }

  // if the character is an asterisk, push "cat" into the new array
  else {
    newArray.push("cat");
  }
  // return new array as a string
  return newArray.join(" ");
}

console.log(replaceAsterisk("My name is * and I am a *.", ["Sabrina", "Black Cat", "extra", "words"]));

Даже сейчас это не тактолкая "кошку" в массив - почему?

Ответы [ 6 ]

4 голосов
/ 23 апреля 2019

Используйте String.replace() с функцией, которая генерирует замещающую строку.В функции получить текущую замену из newWords с помощью счетчика:

function replaceAsterisk(sentence, newWords) {
  let counter = 0;
  
  return sentence.replace(/\*/g, () => newWords[counter++] || '');
}

console.log(replaceAsterisk("My name is * and I am a *.", ["Sabrina", "Black Cat", "extra", "words"]));
2 голосов
/ 23 апреля 2019

Сначала вы должны просмотреть все символы, см. Ниже пример.

function replaceAsterisk(sentence, newWords) {

  let newArray = [];

  let character = sentence.split("");

  console.log(character);
  
  character.forEach(function(c){
    // if the character is not an asterisk, push it into the new array
    if (c !== "*") {
      newArray.push(c);
    }

    // if the character is an asterisk, push "cat" into the new array
    else {
      newArray.push("cat");
    }
  });
  // return new array as a string
  return newArray.join("");
}

console.log(replaceAsterisk("My name is * and I am a *.", ["Sabrina", "Black Cat", "extra", "words"]));
1 голос
/ 23 апреля 2019

вы можете использовать регулярное выражение группы и Array.prototype.shift

replaceAsterisk = (text, words) => {
  const _words = words.slice();
  return text.replace(/(\*)/g, (match) => _words.shift() || match);
}

// valid input
const output1 = replaceAsterisk("My name is * and I am a *.", ["Sabrina", "Black Cat", "extra", "words"]);
console.log(output1);
// empty input
const output2 = replaceAsterisk("My name is * and I am a *.", []);
console.log(output2);
1 голос
/ 23 апреля 2019

Это работает. Разделение на пустые строки может быть странным (см. MDN ... split )

  let newArray = [], sentence = "My name is * and I am a *.";      
  for (let char of sentence){ newArray.push(char); }
  for(let i = 0; i < newArray.length; i++){
    if(newArray[i] == "*"){ newArray[i] = "cat"; }
  }
  console.log(newArray);
1 голос
/ 23 апреля 2019

Вам нужно перебрать все символы в предложении:

function replaceAsterisk(sentence, newWords) {
  let newArray = [];

  for( let i = 0; i < sentence.length; i++) { // This line
    character = sentence[i];
    // if the character is not an asterisk, push it into the new array
    if (character !== "*") {
      newArray.push(character);
    }
  
    // if the character is an asterisk, push "cat" into the new array
    else {
      newArray.push("cat");
    }
  }
  // return new array as a string
  return newArray.join(" ");
}

console.log(replaceAsterisk("My name is * and I am a *.", ["Sabrina", "Black Cat", "extra", "words"]));
0 голосов
/ 23 апреля 2019

Вам нужно перебрать все символы в предложении и получить слово для замены, используя shift:

function replaceAsterisk(sentence, newWords) {
  let newStr = "";
  [...sentence].forEach(char => {
    if (char != "*") {
      newStr += char;
    } else {
      newStr += newWords.shift();
    }
  });
  return newStr;
}

console.log(replaceAsterisk("My name is * and I am a *.", ["Sabrina", "Black Cat", "extra", "words"]));
...