以下是我如何扩展Immutable.Record
import Immutable from 'immutable';
const DATA_DEFAULTS = {
id: String,
data: String,
ref_id: String,
};
export default class Data
extends Immutable.Record(DATA_DEFAULTS) {}
如果json表示不包含ref_id
,那么当我尝试在Chrome devtool的控制台中打印字段的值时,我会得到:
> data.ref_id
String() { [native code] }
我认为这就是为什么我无法过滤出列表中空ref_id
的实体
a = [] // a list of data
b = a.filter(x => x.ref_id != '') // b is the same as a
我想它可以通过以下方式解决:
在json数据中缺少字段时,为Immutable.Record
实例中的字段设置默认值
使用另一种方法来检测实例中是否未设置字段
对于第二种方法,我尝试了data.has('ref_id')
,并且无论字段是否具有任何有效值,它都会始终报告true
。
我的问题:
1)我可以在Immutable.Record
中设置默认值吗?
2)如何过滤Immutable.Record
3)在Immutable.Record
的实例中测试字段中是否存在有效值的正确方法是什么?
答案 0 :(得分:1)
您明确将每个字段的默认值设置为功能 String
。 String
这里不是数据类型,如果这是您的想法。你似乎想要的是
const DATA_DEFAULTS = {
id: '',
data: '',
ref_id: '',
};
1)我可以在Immutable.Record中设置默认值吗?
您的确如何做,只需设置正确的默认值。
2)如何过滤Immutable.Record中可能存在或不存在的字段
记录中的字段始终存在。来自docs:
记录始终具有其定义的键的值。从记录中删除密钥只是将其重置为该密钥的默认值。
3)在
Immutable.Record
的实例中测试字段中是否存在有效值的正确方法是什么?
您可以使用您知道不会明确分配给该字段的默认值。这可能是null
或符号。