Задача кода о массивах и строках в чистом 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

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

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

Kevin B 22.02.2023 22:04

Привет @KevinB, спасибо за ваш отзыв. Я все еще учусь, поэтому любые конструктивные предложения очень приветствуются. Как вы считаете, какое название будет лучшим вариантом? :)

JRPCRD 23.02.2023 00:50
Оптимизация React Context шаг за шагом в 4 примерах
Оптимизация React Context шаг за шагом в 4 примерах
При использовании компонентов React в сочетании с Context вы можете оптимизировать рендеринг, обернув ваш компонент React в React.memo сразу после...
Интервьюер: Почему &apos;[] instanceof Object&apos; возвращает &quot;true&quot;?
Интервьюер: Почему '[] instanceof Object' возвращает "true"?
Все мы знаем, что [] instanceof Array возвращает true, но почему [] instanceof Object тоже возвращает true?
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) и как оно работает с ReactJS
Абстрактное синтаксическое дерево (AST) - это древовидная структура данных, которая представляет структуру и иерархию исходного кода на языке...
2
2
57
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 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);

Большое спасибо за ваше объяснение @Unmitigated. Я закомментировал блок кода, который был близок к решению, которое вы опубликовали (если мы уберем орфографические ошибки и лишние пробелы, из-за которых оно не работало :')). Ваше решение сработало отлично, и среда IDE приняла его как правильное.

JRPCRD 23.02.2023 00:49

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

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

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

Josh 22.02.2023 21:33

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

barisdevjs 22.02.2023 21:51

Привет, @barisdevjs, спасибо за ответ! Это действительно хороший ответ, однако среда IDE продолжала говорить мне придерживаться только той информации, которую мы изучили до сих пор. Но это сработало! (только не для их конкретных проверок)

JRPCRD 23.02.2023 00:45

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

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

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.

Привет, @Josh, большое спасибо за твое решение - твое объяснение действительно помогло мне лучше понять упражнение :)

JRPCRD 23.02.2023 00:44

Другие вопросы по теме