2017-02-20 8 views
1

Я бы хотел, чтобы был простой способ запретить ключи целого для всех неизменяемых js-ключей и автоматически преобразовывать целые числа в строки при обращении к ним.Можно ли автоматически преобразовывать целые ключи в строку для всех объектов Immutable.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>

+0

Weird вещь его не отображается в сниппет, но если вы проверяете в консоли, записи имеет 2 записей – Rajesh

+0

да, журнал сниппет неправильно –

ответ

0

По docs:

Хотя разработан, чтобы довести эти мощные функциональные концепции в JavaScript, она представляет собой API объектно-ориентированного знакомый инженеров Javascript и тесно зеркалирование, что из Массив, карта и набор

Таким образом, существует разницу в set[1] и установите ["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>

+0

Это не достаточно, чтобы обернуть только одну функцию :('setIn',' get', 'getIn' также должны быть обернуты, и, вероятно, в API есть другие места, где он делает разницу между передачей целого или строкой. –

+0

@LiubomyrMykhalchenko yes thats true, но существует разница между числовыми a и не-числовые клавиши. Массивы имеют числовые индексы, где, поскольку карты имеют нечисловые ключи. Это ваше особое требование, когда вы хотите относиться к ним одинаково. Для таких случаев вам необходимо создать функции обертки. Также мой ответ - всего лишь образец того, как вы можете это достичь. – Rajesh