Удалите первый символ из каждой строки в массиве, если первый символ в каждой строке одинаков. - PullRequest
1 голос
/ 06 августа 2020

У меня есть массив строк, и я хочу проверить, одинаковы ли первые char в каждой строке. И если это так, удалите этот character из каждой строки и верните новый массив.

Я делаю это так:

let labels = [
"- Knowledge",
"- Propositional Logic",
"- Inference",
"- Knowledge Engineering",
"- Inference Rules",
"- Resolution",
"- First-Order Logic"
]

let theChar;
let same = true;

for (let index=0; index<labels.length; ++index){
    if (index === 0){
      theChar = labels[index].charAt(0);
      console.log(theChar);
    }else{
      // check if the current label's charAt(0) is the same as theChar
      if(labels[index].charAt(0) != theChar) {
        same = false;
        break;
      }
    }

}

console.log(`SAME: ${same}`)
if(same){
  // remove that element..
  labels = labels.map(ele => ele.substr(1,ele.length).trim());
}

console.log(labels)

Еще один способ, о котором я подумал, - это создать новый массив строк с удалением первого символа из каждой строки, пока я проверяю условие same ness. И если l oop ломается (это означает, что первый символ не одинаков во всех строках), поэтому я сохраняю исходный массив. Если l oop не сломается, оставьте новый массив. Таким образом, мне не придется дважды обходить массив. (но в этом случае я буду выполнять строковые операции с каждым элементом, пока не выйду из l oop (с помощью оператора break или когда все элементы будут выполнены))

Есть ли другие лучший способ сделать это? Или какой из двух подходов лучше, если в массиве много строк?

1 Ответ

1 голос
/ 06 августа 2020

Вы можете просто проверить, имеет ли каждый элемент тот же первый символ, что и первый элемент с every().

И если это удастся, map() массив для получения подстроки каждого элемента, начинающегося после первый символ.

let labels = [
"- Knowledge",
"- Propositional Logic",
"- Inference",
"- Knowledge Engineering",
"- Inference Rules",
"- Resolution",
"- First-Order Logic"
];

let result = labels;

if(labels.every(s => s[0] == labels[0][0])) {
  result = labels.map(s => s.substring(1));
}

console.log(result);

Здесь можно узнать несколько вещей:

  • Вы можете получить доступ к указанным строкам c char, используя вместо этого нотацию доступа к массиву [ ] of charAt()
  • Вы можете опустить второй параметр substring(), если вам все равно нужна остальная часть строки
  • Я настоятельно рекомендую вам прочитать наиболее распространенные функции массива, такие как every(), some(), filter() и так далее. Они действительно полезны
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...