Перво-наперво, мой класс:
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
Вы правильно определили проблему: в JavaScript значение по умолчанию - undefined. Если вы покажете нам код создания этих объектов, мы сможем помочь вам правильно установить значение по умолчанию.
@ Vlad274 Правильный вопрос ... данные поступают из .NET MVC API, но этот .NET-класс не имеет свойства isFavorite. Может быть, из-за сериализации объекта .NET в json свойство удаляется, поскольку оно не существует на стороне API?
Основываясь на том, что класс .NET не имеет этого свойства, он не столько «удаляется», сколько то, что он изначально не существует. Это поведение, которое я ожидал бы, если вы выполняете некоторую привязку Angular, чтобы установить для него значение true (например, с помощью флажка). Если вам абсолютно необходимо, чтобы свойство существовало на 100%, вы можете добавить его к объектам в вашем сервисе с помощью метода .map.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я думаю, что это способ 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>
Установка по умолчанию для свойства isFavorite значения false в объявлении класса должна работать.