Неиспользуемое имущество упало?

Перво-наперво, мой класс:

export class FooBar {
 ...
 isFavorite: boolean = false;

 constructor() {
   this.isFavorite = false;
  }
}

Используя Lodash, я сортирую список FooBar, так что мои фавориты будут вверху списка:

this.fooBars = _.orderBy(this.fooBars, ['isFavorite', 'name'], ['desc', 'asc']);

Когда я добавляю элемент в избранное и просматриваю журнал console.info, он сообщает следующее:

Неиспользуемое имущество упало?

Обратите внимание, что №3 не имеет свойства isFavorite ...

Когда я никогда не ставил isFavorite, он не отображается. Это приводит к неправильной сортировке Lodash. Есть ли способ всегда отображать это свойство, даже если оно не используется / не установлено / ложно?

Пробовал:
- Установка свойства в false в классе
- Установка свойства в false в конструкторе класса
- Цикл через this.foobars в моем компоненте, устанавливая их все на false
- Добавление интерфейса к FooBar

Установка по умолчанию для свойства isFavorite значения false в объявлении класса должна работать.

Below the Radar 19.07.2018 15:44

Вы правильно определили проблему: в JavaScript значение по умолчанию - undefined. Если вы покажете нам код создания этих объектов, мы сможем помочь вам правильно установить значение по умолчанию.

Vlad274 19.07.2018 15:49

@ Vlad274 Правильный вопрос ... данные поступают из .NET MVC API, но этот .NET-класс не имеет свойства isFavorite. Может быть, из-за сериализации объекта .NET в json свойство удаляется, поскольку оно не существует на стороне API?

Hypenate 19.07.2018 17:04

Основываясь на том, что класс .NET не имеет этого свойства, он не столько «удаляется», сколько то, что он изначально не существует. Это поведение, которое я ожидал бы, если вы выполняете некоторую привязку Angular, чтобы установить для него значение true (например, с помощью флажка). Если вам абсолютно необходимо, чтобы свойство существовало на 100%, вы можете добавить его к объектам в вашем сервисе с помощью метода .map.

Vlad274 19.07.2018 17:12
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
4
161
1

Ответы 1

Я думаю, что это способ typeScript по умолчанию для класса

export default class FooBar {
  constructor(private isFavorite: boolean = false) {
     ...
  }
}

или просто

export class FooBar {
  constructor() {
     this.isFavorite = false;
  }
}

Или вы можете использовать функцию в итераторе _.orderBy для соответствующей сортировки списка:

var foobars = [{isFavorite:false, name:"aaa"}, {isFavorite:true, name:"bbb"}, {isFavorite:false, name:"ccc"}, {name:"ddd"}]


foobars = _.orderBy(foobars, [function(foobar) {
    return foobar.isFavorite == true;
}, "name"], ["desc", "asc"]);

console.info(foobars)
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>

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