fromJS()
Глубоко преобразует обычные JS-объекты и массивы в неизменяемые Map и List.
fromJS(jsValue: unknown,reviver?: (key: string | number,sequence: Collection.Keyed<string, unknown> | Collection.Indexed<unknown>,path?: Array<string | number>) => unknown): Collection<unknown, unknown>
Обсуждение
fromJS будет преобразовывать массивы и подобные массивам объекты в List, а обычные объекты (без пользовательского прототипа) — в Map. Итерируемые объекты могут быть преобразованы в List, Map или Set.
Если reviver необязательно предоставляется, он будет вызываться с каждой коллекцией как Seq (начиная с самых вложенных коллекций и переходя к самой верхней коллекции), вместе с ключом, относящимся к каждой коллекции, и родительским JS-объектом, предоставленным как this. Для верхнего уровня объекта ключ будет "". Этот reviver должен возвращать новую неизменяемую коллекцию, что позволяет выполнять пользовательские преобразования из глубоких JS-объектов. Наконец, предоставляется path, представляющий собой последовательность ключей к этому значению от исходного значения.
reviver действует аналогично тому же параметру в JSON.parse.
Если reviver не указан, по умолчанию объекты будут преобразованы в Map, а массивы — в List следующим образом:
const { fromJS, isKeyed } = require('immutable')
function (key, value) {
return isKeyed(value) ? value.toMap() : value.toList()
}run it
Соответственно, этот пример преобразует данные из обычного JS в OrderedMap и List:
const { fromJS, isKeyed } = require('immutable')
fromJS({ a: {b: [10, 20, 30]}, c: 40}, function (key, value, path) {
console.log(key, value, path)
return isKeyed(value) ? value.toOrderedMap() : value.toList()
})
> "b", [ 10, 20, 30 ], [ "a", "b" ]
> "a", {b: [10, 20, 30]}, [ "a" ]
> "", {a: {b: [10, 20, 30]}, c: 40}, []run it
Обратите внимание, что при использовании JS-объектов для создания неизменяемых Map, свойства JavaScript-объектов всегда являются строками, даже если они записаны в сокращенном виде без кавычек, в то время как неизменяемые Map принимают ключи любого типа.
const { Map } = require('immutable')
let obj = { 1: "one" };
Object.keys(obj); // [ "1" ]
assert.equal(obj["1"], obj[1]); // "one" === "one"
let map = Map(obj);
assert.notEqual(map.get("1"), map.get(1)); // "one" !== undefinedrun it
Обращение к свойствам для JavaScript-объектов сначала преобразует ключ в строку, но поскольку ключи неизменяемых Map могут быть любого типа, аргумент для get() не изменяется.
© 2014–present, Lee Byron and other contributors
Licensed under the 3-clause BSD License.
https://immutable-js.com/docs/v4.2.1/fromJS()/