#javascript #node.js
#javascript #node.js
Вопрос:
this.breakintoletters=()=>
this.lengthi!==0?(this.title2=this.title,this.title2.split(),this.title2.
map((x)=>this.arol.push(new letter(x))))
:!!false
Итак, в основном это код. Предполагается, что он разбивает строку на буквы, а затем помещает соответствующие объекты в массив..
Выполняется проверка длины строки, если не 0, возвращает ошибку, в которой находится функция MAP …) TypeError сообщает мне, что это не функция. Редактор не показывает ошибки. Был бы признателен за помощь
Комментарии:
1. Какое злоупотребление троичным оператором. И
map
.2. Ваш код крайне нечитабелен, и
map
иpush
в целом не является хорошим способом использования map3. «как будто это НЕ НЕ FALSE, следовательно, true» — это не то, как работает это логическое обозначение. Он вернется
false
. С какого исходного значения начинать. Поэтому использовать этот трюк здесь бессмысленно.4. Ваша проблема в том, что
this.title2.split()
вы не присваиваете разделенное значениеthis.title2
, а не используете map дляthis.title2
, который является string5. разделение ничего не разделяет без значения.
Ответ №1:
Я предлагаю использовать другой подход, проверяя this.lengthi
заранее и возвращая либо false
, либо позже отображенную длину переданных значений.
this.breakintoletters = () => {
if (!this.lengthi) return false;
this.title2 = this.title;
// this.title2.split(); the result is not taken, not even splitted
return this.title2.map(x => this.arol.push(new letter(x)));
};
Ответ №2:
Вы не присваиваете разделенное значение обратно this.title2
и не используете map
для this.split2
, которое является строкой
this.breakintoletters=()=>
this.lengthi ? (this.title2=this.title,
this.title2=this.title2.split(),
this.title2.map((x)=>this.arol.push(new letter(x))))
:false
ИМО, вы должны попытаться сделать свой код понятным только до такой степени, чтобы он оставался доступным для чтения, вы можете просто сделать это следующим образом
this.breakintoletters = ( ) => {
if(this.lengthi === 0 ) return false;
this.title2=this.title;
this.title2=this.title2.split();
return this.title2.map((x) => this.arol.push(new letter(x))))
}
Ответ №3:
(this.title2=this.title, this.title2.split(), this.title2. map((x)=>this.arol.push(новая буква(x))))
this.arol
Это имя массива?
Попробуйте реструктурировать его, чтобы быть:
(this.title.split().map((x) => this.arol.push(новая буква(x)))
Такие методы, как split() join() map () и т.д., Могут быть объединены в цепочку.
Я бы переосмыслил использование функции map здесь, хотя и троичный, который другие комментаторы рассмотрели выше. Я имею в виду, что технически это работает, но если цель состоит в том, чтобы выполнить итерацию по строке, чтобы получить определенные значения, было бы лучше использовать цикл for. Функции отображения больше, когда вы хотите выполнить итерацию, чтобы применить один и тот же указанный метод к каждому отдельному символу
Кроме того, это всего лишь форматирование, но оно значительно облегчает чтение и понимание вашего кода, когда у вас есть некоторые пробелы между переменными и операторами, и вы выбираете имена переменных, которые имеют смысл для того, что вы делаете (this.bookLength , this.reverseAr), или, по крайней мере, используя общий this.array или this.arr. Это облегчает задавать подобные вопросы, потому что вы получите меньше уточняющих вопросов об опечатках, а также, если вы когда-либо планируете работать над большей базой кода, это важно писать чистый код, понятный тем, кто вас не знает
Комментарии:
1. Большое вам спасибо за такой подробный ответ. это. lengthi объявлен в другом месте, это не «длина», я делал!! false поскольку один из моих наставников пишет подобный код (разработчик программного обеспечения), я просто скопировал это у него и с тех пор использую. Используя !! false Я просто пытался показать, что это даст false. это. arol — это массив в объекте, да. Один из моих наставников предложил использовать map / filter / reduce чаще, чем для циклов, потому что, по-видимому, это легче понять другим разработчикам. Я думаю, на основе Opnion.
2. Map filter и reduce — отличные методы, но я немного подробнее объяснил выше, почему это может быть не лучшим выбором в данном случае (особенно при итерации с целью перехода к массиву, это не имеет особого смысла), но если это работает, это работает. Это интересно в !! false Я никогда раньше не видел такого в JavaScript, ваш наставник работает в JavaScript?
3. @MxOliver:
!!false
конечно, не имеет никакого практического смысла, но этот трюк широко используется, когда вы хотите убедиться, что вы получаете логическое значение, а не другое ложное значение:answer = ""; !!answer
(или что-то в этом роде).