Как удалить слова в центре строки в Javascript

#javascript

Вопрос:

У меня есть этот код:

 var name1 = "John James"
var name2 = "Jake Connor Steve"
var name3 = "George"
var name4 = "Michael James Jackson"
 

Что мне нужно, чтобы проверить, содержит ли каждая строка более двух слов, если строка больше двух слов, то удалите средние слова и оставьте только первое и последнее слово, чтобы результат был таким:

 var name1 = "John James"
var name2 = "Jake Steve"
var name3 = "George"
var name4 = "Michael Jackson"
 

Я не знаю, как определить размер слов внутри строки, как я могу это сделать ?
Есть какие-нибудь предложения?

Комментарии:

1. Разделите строку пробелами. Объедините первую и последнюю (если таковые имеются) записи.

Ответ №1:

split строка в массив. Если длина массива больше 2, удалите элемент в первом индексе с splice помощью . Затем верните новую join измененную строку.

 function checkRemove(str) {
  const arr = str.split(' ');
  if (arr.length > 2) arr.splice(1, 1);
  return arr.join(' ');
}

console.log(checkRemove('Jake Connor Steve'));
console.log(checkRemove('John James'));
console.log(checkRemove('George'));
console.log(checkRemove('Michael James Jackson')); 

Ответ №2:

 const name1 = "John James"
const name2 = "Jake Connor Steve"
const name3 = "George"
const name4 = "Michael James Jackson"

function midRemover(str) {
  //First we turn the string into an array by using the .split() so we can find the middle number in the array.
  const arr = str.split(" ");
  //next we need to find the middle value from our string turned array and remove it
  const middle = Math.floor(arr.length / 2);

  // We check to make sure that we have more than 2 items in the array so we don't just remove whats there (if there's only one or less items),
  //We just return those items.
  if (arr.length > 2) {
    // We use Splice to remove the middle index.
    arr.splice(middle, 1)
    //Then use .join() to turn our array back into a string
    return arr.join(" ");
  } else {
    return arr.join(" ");
  }
}

console.log(midRemover(name1));
console.log(midRemover(name2));
console.log(midRemover(name3));
console.log(midRemover(name4)); 

Ответ №3:

Несколько иной подход, использующий регулярное выражение для фильтрации пробелов и filter исключения средних индексов.

  • Разделите имена пробелами
  • фильтр по индексу
  • объединить массив с пробелом
 const foo = str => str
  .split(/s/ig)
  .filter((a,b,c) => b == 0 || b === c.length - 1)
  .join(' ');

// test
console.log([
    "John James",
    "Jake Connor Steve",
    "George",
    "Michael James Jackson"
].map(foo)); 

Ответ №4:

Пожалуйста, используйте этот код. Вы можете использовать функцию «разделить», чтобы разделить имена. И если количество имен больше 2, вы получите имя и фамилию.

     const names = [
        "John James",
        "Jake Connor Steve",
        "George",
        "Michael James Jackson",
    ];

    const result = names.map(name => {
        const arr = name.split(' ');
        return arr.length > 2 ? arr[0]   ' '   arr[arr.length - 1] : name;
    });

    console.log(result); 

Комментарии:

1. можете ли вы просто не дать ответ? он должен учиться…

2. Спасибо!! это сработало идеально