1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mjpclab-object-hierarchy-access

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Импорт методов

Для среды модуля 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 == {} 

Summary: имена для назначения методов

Возвращает\Категория Установка значения Создание свойства иерархии
Корневой объект 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 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
ISC
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mjpclab-object-hierarchy-access.git
git@api.gitlife.ru:oschina-mirror/mjpclab-object-hierarchy-access.git
oschina-mirror
mjpclab-object-hierarchy-access
mjpclab-object-hierarchy-access
master