未使用的属性被删除了吗?

5
首先,我的类:
export class FooBar {
 ...
 isFavorite: boolean = false;

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

使用 Lodash 我对 FooBar 列表进行排序,以便我的收藏夹在列表顶部:
this.fooBars = _.orderBy(this.fooBars, ['isFavorite', 'name'], ['desc', 'asc']);

当我将一个项目标记为收藏并查看我的console.log时,它会显示如下内容: isFavorite is not shown when false 请注意,#3没有isFavorite属性...
每当我没有设置isFavorite时,它就不会被显示。这会导致Lodash排序不正确。
是否有一种方法可以始终显示此属性,即使它未使用/未设置/为false?
我尝试过以下方法:
- 在类中将属性设置为false - 在类的构造函数中将属性设置为false - 在组件中遍历this.foobars,将它们全部设置为false - 为FooBar添加接口

1
在类声明中将isFavorite属性默认为false应该有效。 - Below the Radar
1
你已经正确地识别了问题:在JavaScript中,默认值是undefined。如果您可以向我们展示构建这些对象的代码,我们可能能够帮助您正确设置默认值。 - Vlad274
@Vlad274 问题很有价值...数据来自.NET MVC API,但是该.NET类没有isFavorite属性。这可能是因为从.NET对象序列化为JSON时,由于API端不存在该属性,所以该属性被删除了吗? - Hypenate
1
基于.NET类没有这个属性,它不是"被删除"而是一开始就不存在。如果您正在执行一些Angular绑定以将其设置为true(例如复选框),那么这就是我期望的行为。 如果您绝对百分之百需要该属性存在,则可以使用.map方法将其添加到您服务中的对象中。 - Vlad274
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.log(foobars)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接