Я n00b и в настоящее время выполняю несколько задач на чистом Javascript, чтобы попасть на буткемп.
Мы просматриваем массивы и узнали несколько вещей, чтобы выполнить хакерские задачи, например:
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'
var powerRangers = ['Red', 'Black', 'Yellow', 'Pink', 'Blue'];
for( var i = 0; i < powerRangers.length; i++){
console.info(i + ':' + powerRangers[i]);
}
ИСПЫТАНИЕ В вызове указано:
Инструкции
Скопируйте неповрежденные данные из массива, хранящегося в 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
Большое вам спасибо за вашу помощь!
Привет @KevinB, спасибо за ваш отзыв. Я все еще учусь, поэтому любые конструктивные предложения очень приветствуются. Как вы считаете, какое название будет лучшим вариантом? :)
Не 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 приняла его как правильное.
Эй, посмотрите эту живую демонстрацию
targetDisk.forEach((e) => {
if (e !== corruptionSymbol) newDisk.push(e);
});
console.info(newDisk.join(''))
Https://stackblitz.com/edit/js-2bzrye?file=index.html,index.js
Я поставил плюс один. Это хороший ответ. Не видел, чтобы он пытался повторно преобразовать все обратно в строку постфактум.
Спасибо. Я думаю, что есть несколько способов решить такие вещи. Приятно видеть разные решения для таких вещей. @Джош
Привет, @barisdevjs, спасибо за ответ! Это действительно хороший ответ, однако среда IDE продолжала говорить мне придерживаться только той информации, которую мы изучили до сих пор. Но это сработало! (только не для их конкретных проверок)
Ваше текущее решение преобразует записи массива в строку, а затем пытается воссоздать ее как массив. Это будет подверженный ошибкам процесс.
Все, что вам действительно нужно сделать, это запустить цикл, который проверяет наличие вашего плохого персонажа.
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, большое спасибо за твое решение - твое объяснение действительно помогло мне лучше понять упражнение :)
Заголовок здесь довольно плохо описывает вашу проблему, чтобы ее могли найти другие пользователи с той же проблемой.