javascript - 如何设置默认值

标签 javascript immutable.js

这是我扩展 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 实例中字段是否存在有效值的正确方法是什么?

最佳答案

您明确将每个字段的默认值设置为函数 字符串。如果您是这么想的话,String 这里不是数据类型。您似乎想要的是

const DATA_DEFAULTS = {
  id: '',
  data: '',
  ref_id: '',
};
<小时/>

1) Can I set a default value in a Immutable.Record?

正如您已经所做的那样,您只需设置正确的默认值即可。

<小时/>

2) How to filter on field that may or may not exist in the Immutable.Record

记录上的字段始终存在。来自 docs :

Records always have a value for the keys they define. removeing a key from a record simply resets it to the default value for that key.

<小时/>

3) What is the right way to test the existence of valid value in a field in an instance of Immutable.Record?

您可以使用您知道不会显式分配给该字段的默认值。这可能是 null 或符号。

关于javascript - 如何设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37430504/

相关文章:

javascript - 为什么 [[GetPrototypeOf]] 是 Javascript 代理的不变量?

javascript - 不可变 typescript 类型定义 : why is concat operating on any?

javascript - 在 Immutable.js 中扩展记录

javascript - 将对象数组映射到按对象键 js 不可变分组的映射中

javascript - Immutable.js 数据结构的自定义相等语义

javascript - 从嵌套 JavaScript 对象检索属性的最有效方法是什么?

javascript - SapUI5 表 - 404 未找到错误

javascript - 如何使用 jQuery 解析 json 并将其作为列表输出到 HTML 中?

javascript - 等待许多异步函数执行

javascript - 弄乱 Firefox Javascript 解释器有多容易?