Я 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
Большое вам спасибо за вашу помощь!
🤔 А знаете ли вы, что...
JavaScript имеет множество библиотек и фреймворков, таких как jQuery, Angular, и Vue.js.
Не 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(''))
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
.