Для среды модуля ES используйте import
, чтобы импортировать методы:
import { get, set } from 'object-hierarchy-access';
Для среды commonjs используйте require
, чтобы импортировать методы:
const { get, set } = require('object-hierarchy-access')
Для модульной среды AMD определите модуль object-hierarchy-access
из файла dist/index
.
В глобальном режиме методы находятся в глобальной переменной ObjectHierarchyAccess
.
Все методы для установки значения имеют одинаковое определение параметров:
setValue(targetObject, ...hierarchyProperties, lastProperty, value);
setValue(targetObject, [...hierarchyProperties, lastProperty], value);
set
Устанавливает значение свойств иерархии объекта и возвращает объект:
import { set } from 'object-hierarchy-access';
const obj = {};
set(obj, 'a', 'b', 'c', 100);
console.log(obj.a.b.c); // 100
Свойства могут быть в массивах:
import { set } from 'object-hierarchy-access';
const obj = {};
set(obj, ['a', 'b', 'c'], 100);
console.log(obj.a.b.c); // 100
set(obj, ['d', 'e', 'f'], ['g', 'h', 'i'], 200);
console.log(obj.d.e.f.g.h.i); // 200
Можно одновременно создать корневой объект:
import { set } from 'object-hierarchy-access';
const obj = set({}, 'a', 'b', 'c', 100);
console.log(obj.a.b.c); // 100
setIfUndef
Только устанавливает значение, если последнее свойство иерархии не существует или его значение равно undefined
:
import { setIfUndef } from 'object-hierarchy-access';
const obj = {};
setIfUndef(obj, 'a', 'b', 'collection', []);
obj.a.b.collection.push(100);
console.log(obj.a.b.collection); // [100]
setIfUndef(obj, 'a', 'b', 'collection', []); // не будет переопределять предыдущий массив
obj.a.b.collection.push(200);
console.log(obj.a.b.collection); // [100, 200]
Также можно одновременно создать объект:
import { setIfUndef } from 'object-hierarchy-access';
const obj = setIfUndef({}, 'a', 'b', 'c', 100);
console.log(obj.a.b.c); // 100
Свойство может быть объектом дескриптора вместо примитивного значения для элемента свойства, отличного от последнего. Форма дескриптора: {name|getName, value|type|create, override?, created?, skipped?, got?}
.
name
— это примитивное имя свойства.getName(parent)
— функция обратного вызова для получения имени свойства.value
должен быть объектом, назначенным объекту родительского объекта name
.type
— конструктор функции (или класс) без параметра, который можно использовать для создания объекта, назначить родительскому объекту name
.create(parent, name)
— функция обратного вызова, которая возвращает настраиваемый объект, назначенный parent
объекту name
.override
определяет, всегда ли создавать новый объект иерархии, даже если свойство уже существует.created(parent, name, current)
— функция обратного вызова при создании нового объекта иерархии.skipped(parent, name, current)
— функция обратного вызова, когда объект иерархии уже существует и пропущен.got(parent, name, current)
— функция обратного вызова, когда текущий объект иерархии получен независимо от того, создан он или пропущен.Свойство также может быть функцией, она просто действует как функция обратного вызова getName
в объекте дескриптора.
Если не указана опция, связанная с name, имя свойства будет undefined
.
Если не указано значение, связанное со значением, значением будет {}
.
const obj = set({}, 'a', {name: 'b', value: []}, '0', 100);
console.log(obj); // {a: {b: [100]}}
const obj2 = set({}, 'a', {name: 'b', value: {}}, 'c', 100);
console.log(obj2); // {a: {b: {c: 100}}
const obj = set({}, 'a', {name: 'b', type: Array}, '0', 100);
console.log(obj); // {a: {b: [100]}}
const obj = set({}, 'a', {name: 'b', create: () => [1, 2, 3]}, '3', 200);
console.log(obj); // {a: {b: [1, 2, 3, 200]}}
const obj = set({}, 'a', 'b', 'c', 100);
setIfUndef(obj, 'a', 'b', 'c', 200);
console.log(obj.a.b.c); // 100
setIfUndef(obj, 'a', {name: 'b', override: true}, 'c', 300);
console.log(obj.a.b.c); // 300
assign
и assignIfUndef
Точно так же, как set
и... ```
setPropIfUndef(obj, 'a', 'b', {name:'c', type:Array}); // не создаст экземпляр массива
setPropIfUndef(obj, 'a', 'b', {name:'c', create: ()=>[]}); // не создаст экземпляр массива
По умолчанию свойства иерархии создаются только в том случае, если они не существуют, если не указано `override`.
Значение будет всегда переопределено, если только не используются методы, связанные с `-IfUndef`.
Для создания свойств иерархии методов, свойства не последней иерархии создаются по умолчанию только в том случае, если их не существует, если не указано `override`. Для последнего свойства иерархии,
методы без `-IfUndef` переопределяют существующее свойство и игнорируют `override`,
в то время как методы `-IfUndef` не будут этого делать, если `override` не равно `true`.
```javascript
const obj = {};
setPropIfUndef(obj,'a','b',{name:'c', value:[]}); // obj.a.b.c === []
setPropIfUndef(obj,'a','b',{name:'c', value:{}}); // obj.a.b.c не изменяется
setPropIfUndef(obj,'a','b',{name:'c', value:{}, override:true}); // obj.a.b.c == {}
Возвращает\Категория | Установка значения | Создание свойства иерархии |
---|---|---|
Корневой объект |
set , setIfUndef
|
setProp , setPropIfUndef
|
Второй последний уровень иерархии |
assign , assignIfUndef
|
assignProp , assignPropIfUndef
|
Последний уровень иерархии |
put , putIfUndef
|
putProp , putPropIfUndef
|
get
Получение значения из свойств иерархии объекта.
Определение параметра:
get(targetObject, ...hierarchyProperties);
get(targetObject, [hierarchyProperties]);
Указание свойств строкой, числом или символом:
import { get } from 'object-hierarchy-access';
const obj = {a: {b: {c: 100}}};
get(obj, 'a', 'b'); // возвращает {c: 100}
get(obj, 'a', 'b', 'c'); // возвращает 100
get(obj, ['a', 'b', 'c']); // возвращает 100
Свойство может быть дескриптором объекта, форма которого {name|getName|getValue, got?}
.
name
— это примитивное имя свойства.getName(parent)
— функция обратного вызова для получения имени свойства.getValue(parent)
— функция обратного вызова для непосредственного получения значения свойства.got(parent, name, current)
— функция обратного вызова, когда значение было получено от свойства parent
name
, name
будет неопределённым, если значение получено с помощью getValue
.import { get } from 'object-hierarchy-access';
const obj = {a: {b: {c: 100}}};
get(obj,
{
name: 'a',
got: (parent, name, current) => {
/*
parent => {a: {b: {c: 100}}};
name => 'a';
current => {b: {c: 100}};
*/
}
},
{
getName: () => 'b',
got: (parent, name, current) => {
/*
parent => {b: {c: 100}};
name => 'b';
current => {c: 100};
*/
}
},
{
getValue: parent => parent.c,
got: (parent, name, current) => {
/*
parent => {c: 100};
name => 'undefined';
current => 100;
*/
}
}
);
Свойство также может быть функцией, оно просто действует как обратный вызов getValue
в дескрипторе объекта.
const obj = {a: {value: 1, b1: {c: 100}, b2: {c: 200}}};
get(obj, 'a', parent => parent.value === 1 ? parent.b1 : parent.b2, 'c'); // возвращает 100
exist
Проверка существования иерархического имени свойства в целевом объекте,
не важно, является ли последнее значение иерархии undefined
или null
.
Определение параметра:
exist(target, ...propertyNames);
exist(target, [propertyNames]);
import { exist } from 'object-hierarchy-access';
const obj = {a: {b: {c: 0}}};
exist(obj, 'a', 'b', 'c'); // true
exist(obj, 'a', 'b', 'd'); // false
array2map
Превращает массив объектов в записи хэш-карты.
Определение параметров:
array2map(sourceArray, keyHierarchyProperty|[keyHierarchyProperties], valueHierarchyProperty|[valueHierarchyProperties]);
"hierarchyProperty" совпадает с get
, может быть именем свойства, дескриптором или функцией, действующей как getValue
.
Он используется для каждого элемента массива. redim(targetObject, ...hierarchyIndexes); redim(targetObject, newHierarchyIndexes);
Здесь targetObject
— это объект, иерархию которого нужно изменить, а ...hierarchyIndexes
и newHierarchyIndexes
— индексы иерархии. ```
hierarchyIndex
— это исходная глубина `targetObject`, начиная с 0.
```javascript
import { redim } from 'object-hierarchy-access';
const obj1 = {
red: {
wooden: {house: 'красный деревянный дом', ship: 'красный деревянный корабль'},
iron: {house: 'красный железный дом', ship: 'красный железный корабль'},
stone: {house: 'красный каменный дом', ship: 'красный каменный корабль'}
},
green: {
wooden: {house: 'зелёный деревянный дом', ship: 'зелёный деревянный корабль'},
iron: {house: 'зелёный железный дом', ship: 'зелёный железный корабль'},
stone: {house: 'зелёный каменный дом', ship: 'зелёный каменный корабль'}
},
blue: {
wooden: {house: 'синий деревянный дом', ship: 'синий деревянный корабль'},
iron: {house: 'синий железный дом', ship: 'синий железный корабль'},
stone: {house: 'синий каменный дом', ship: 'синий каменный корабль'}
}
};
const result1 = redim(obj1, 1, 2, 0);
/*
{
wooden: {
house: {red: "красный деревянный дом", green: "зелёный деревянный дом", blue: "синий деревянный дом"},
ship: {red: "красный деревянный корабль", green: "зелёный деревянный корабль", blue: "синий деревянный корабль"}
},
iron: {
house: {red: "красный железный дом", green: "зелёный железный дом", blue: "синий железный дом"},
ship: {red: "красный железный корабль", green: "зелёный железный корабль", blue: "синий железный корабль"}
},
stone: {
house: {red: "красный каменный дом", green: "зелёный каменный дом", blue: "синий каменный дом"},
ship: {red: "красный каменный корабль", green: "зелёный каменный корабль", blue: "синий каменный корабль"}
}
}
*/
const obj2 = [
{a: 1, b: 2, c: 3},
{a: 10, b: 20, c: 30},
{a: 100, b: 200, c:300},
];
const result2 = redim(obj2, 1, 0);
/*
{
a: [1, 10, 100],
b: [2, 20, 200],
c: [3, 30, 300]
}
*/
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )