【问题标题】:Is it possible to automatically convert integers keys to string for all Immutable.js object?是否可以将所有 Immutable.js 对象的整数键自动转换为字符串?
【发布时间】:2017-02-20 10:35:33
【问题描述】:

我希望有一种简单的方法可以禁止所有不可变 js 键的整数键,并在访问它们时自动将整数转换为字符串。

var a = Immutable.Map({})
a = a.set("1", "string");
a = a.set(1, "integer");
console.log(a.size);     // 2
console.log(a);          // {"1": "string", 1: integer}
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.min.js"></script>

【问题讨论】:

  • 奇怪的是它没有显示在 sn-p 但是如果你在控制台中检查,条目有 2 个条目
  • 是的,sn-p 日志不正确

标签: javascript immutable.js


【解决方案1】:

根据docs

虽然旨在将这些强大的函数概念引入 JavaScript,但它提供了 JavaScript 工程师熟悉的面向对象的 API,并且与 Array、Map 和 Set 的 API 非常相似

所以set[1] 和set["1"] 是有区别的。但是,如果您希望仅具有字符串值,则可以使用自定义包装器来添加键的字符串化版本。

以下是示例:

Immutable.Map.prototype.addMyEntry = function(key, value){
  return this.set(key.toString(), value);
}

var a = Immutable.Map({})
a = a.addMyEntry("1", "string");
a = a.addMyEntry(1, "integer");
console.log(a.size)
console.log(a)
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.min.js"></script>

【讨论】:

  • 仅包装一个函数是不够的 :( setIngetgetIn 也必须被包装,并且 API 中可能还有其他地方在传递整数之间有所不同或字符串。
  • @LiubomyrMykhalchenko 是的,这是真的,但数字键和非数字键之间存在差异。数组具有数字索引,而映射具有非数字键。它是您希望对它们进行相同处理的特定要求。对于这种情况,您将需要创建包装函数。此外,我的回答只是您如何实现它的一个示例。
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-05
相关资源
最近更新 更多