Задача кода о массивах и строках в чистом Javascript

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

Мы просматриваем массивы и узнали несколько вещей, чтобы выполнить хакерские задачи, например:

  • Методы, такие как: pop(), push(), split(''), join() (или join(' '), если мы хотим удалить запятые),
  • Как в консоли регистрировать, что находится внутри массивов, и объединять значения со строками.
  • Как распечатать определенные элементы массива, например:
var petShop = ['Puppies', 'Kitties', 'Hamsters', 'Snakes', 'Birds'];

console.info('In the second cage we have: ' + petShop[1]);

// prints 'In the second cage we have: Kitties'
  • Массив.длина
  • Как использовать циклы for для печати каждого из элементов массива, например:
var powerRangers = ['Red', 'Black', 'Yellow', 'Pink', 'Blue'];

for( var i = 0; i < powerRangers.length; i++){
    console.info(i + ':' + powerRangers[i]);
}

  • мы также прошли через операторы if

ИСПЫТАНИЕ В вызове указано:

инструкции

Скопируйте неповрежденные данные из массива, хранящегося в targetDisk, в пустой массив newDisk (испорченные данные выглядят так: ø). Затем выведите содержимое диска на терминал в виде строки.

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

МОЙ КОД

var targetDisk = [ 'E', 'ø', '-', 'C', 'ø', 'o', 'r', 'ø', 'ø', 'p', '\'', 'ø', 's', ' ', 'E', 'v', 'ø', 'i', 'ø', 'ø', 'l'];
var newDisk = [];
var corruptionSymbol = 'ø';

var phrase = targetDisk.join(' ');

console.info('This is the phrase: ' + phrase);

var newPhrase = phrase.split('ø');

console.info('This is the newPhrase: ' + newPhrase);

for( var i = 0; i < newPhrase.length; i++){
    newDisk.push(newPhrase[i]);
      //console.info(newDisk);
}

console.info('This is the newDisk: ' + newDisk.join(''));

ВЫХОД

Код указан неверно. Ваш код не соответствует стандартам fSociety, продолжайте его улучшать. Это фраза: E ø - C ø o r ø ø p ' ø s E v ø i ø ø l Это новая фраза: E , - C , или r , , p ' , s E v , i , , l Это новый Диск: E - C o r p 's E v i l


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

Может ли кто-нибудь помочь мне понять, что я делаю неправильно? Как я могу удалить эти пробелы между буквами в конечной строке и получить что-то вроде этого: E-Corp's Evil

Большое вам спасибо за вашу помощь!

🤔 А знаете ли вы, что...
JavaScript имеет множество библиотек и фреймворков, таких как jQuery, Angular, и Vue.js.


57
3

Ответы:

Решено

Не join или split. Просто переберите исходный массив и сравните каждый символ с запрещенным символом. Вызывайте push только в новом массиве, если это не тот символ.

for (let i = 0; i < targetDisk.length; i++)
    if (targetDisk[i] !== corruptionSymbol)
        newDisk.push(targetDisk[i]);

Это можно сделать еще проще с помощью Array#filter.

let newDisk = targetDisk.filter(c => c !== corruptionSymbol);

Эй, посмотрите эту живую демонстрацию

targetDisk.forEach((e) => {
  if (e !== corruptionSymbol) newDisk.push(e);
});

console.info(newDisk.join(''))
You can use forEach to check the element is matching with the corrupted Symbol or not. Then push it to the new array and join it with join('')

https://stackblitz.com/edit/js-2bzrye?file=index.html,index.js


Ваше текущее решение преобразует записи массива в строку, а затем пытается воссоздать ее как массив. Это будет подверженный ошибкам процесс.

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

const targetDisk = [ 'E', 'ø', '-', 'C', 'ø', 'o', 'r', 'ø', 'ø', 'p', '\'', 'ø', 's', ' ', 'E', 'v', 'ø', 'i', 'ø', 'ø', 'l'];

const corruptionSymbol = 'ø';

let newDisk = []

for (const entry of targetDisk) {
    if (entry !== corruptionSymbol) {
        newDisk.push(entry)
    }
}

console.info(newDisk)

Кроме того, var это плохо. Вместо этого используйте const или let.