Коллекции. ICollection

Types/collection:IEnumerable

Интерфейс коллекции элементов c последовательным доступом. Позволяет перебирать элементы один за другим.

Примеры реализации

Примеры

Переберем поля записи:

// TypeScript
import {Record} from 'Types/entity';

const employee = new Record({
    rawData: {
        id: 1,
        firstName: 'John',
        lastName: 'Smith'
    }
});
employee.each((name) => {
    console.log(name);
});
// output: id, firstName, lastName

Types/collection:IList

Интерфейс списка — коллекции c доступом по индексу.

Возможности

  • чтение/запись элемента коллекции по индексу;
  • добавление/удаление элементов коллекции по индексу;
  • поиск индекса элемента;
  • очистка списка, замена содержимого из другой коллекции;
  • получение количества элементов.

Примеры реализации

Примеры

Получим значения элементов коллекции:

// TypeScript
import {List} from 'Types/collection';

const characters = new List({
    items: [{
        firstName: 'Tom',
        lastName: 'Sawyer'
    }, {
        firstName: 'Huckleberry',
        lastName: 'Finn'
    }]
});

// 'Tom'
const tomsName = characters.at(0).firstName;

// 'Huckleberry'
const huckleberriesName = characters.at(1).firstName;

Types/collection:RecordSet

Рекордсет — список записей, имеющих общий формат полей.

Возможности

Рекордсет обладает всеми возможностями ObservableList.

Дополнительные возможности:

  • использование сырых данных в разных форматах;
  • генерация записей по сырым данным;
  • внедрение собственных конструкторов записей;
  • манипуляции с форматом полей;
  • сериализация/десериализация;

Важно

по умолчанию используется адаптер для данных в формате JSON. Если вы используете данные в каком-либо другом формате (СБИС-JSON, XML), то нужно подключить соответствующий адаптер.

Примеры

Создадим рекордсет, в котором в качестве сырых данных используется JSON:

// TypeScript
import {RecordSet} from 'Types/collection';

const characters = new RecordSet({
    rawData: [{
        firstName: 'Tom',
        lastName: 'Sawyer'
    }, {
        firstName: 'Huckleberry',
        lastName: 'Finn'
    }]
});

// 'Tom'
const tomsName = characters.at(0).get('firstName');

// 'Huckleberry'
const huckleberriesName = characters.at(1).get('firstName');

Создадим рекордсет, в котором в качестве сырых данных используется ответ БЛ СБИС:

// TypeScript
import {RecordSet} from 'Types/collection';
import {adapter} from 'Types/entity';

const serverResponse = {
    _type: 'recordset',
    d: [
        ['Tom', 'Sawyer'],
        ['Huckleberry', 'Finn']
    ],
    s: [
        {n: 'firstName', t: 'Строка'},
        {n: 'lastName', t: 'Строка'}
    ]
};

const characters = new RecordSet({
    rawData: serverResponse,
    adapter: new adapter.Sbis()
});

// 'Tom'
const tomsName = characters.at(0).get('firstName');

// 'Huckleberry'
const huckleberriesName = characters.at(1).get('firstName');

Диаграмма классов

См. также