indexed
Version:
database-like indexed array that always returns a new array
120 lines (108 loc) • 2.59 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.some = some;
exports.map = map;
exports.fill = fill;
exports.find = find;
exports.getIndex = getIndex;
exports.get = get;
exports.has = has;
var _arrayIndexes = require('./array-indexes');
var _constants = require('./constants');
function some(props, arr, callback, thisArg) {
var length = arr.length;var i = 0;
while (i < length) {
var val = arr[i];
var result = callback.call(thisArg, val, i, arr);
if (result === _constants.BREAK) {
return false;
}
if (result === _constants.SKIP) {
i++;continue;
}
if (result == true) {
return true;
}
i++;
}
return false;
}
function map(props, arr, callback, thisArg) {
var length = arr.length;var i = 0;var newArr = [];
while (i < length) {
var val = arr[i];
var result = callback.call(thisArg, val, i, arr);
if (result === _constants.BREAK) {
return newArr;
}
if (result === _constants.SKIP) {
i++;continue;
}
newArr.push(result);
i++;
}
return newArr;
}
function fill(props, arr, value, start, end) {
throw new Error('fill cannot not be used');
}
function find(props, arr, callback, thisArg) {
var indexes = props.indexes;
if (typeof callback == 'function') {
return _constants.arrProto.find.call(arr, callback, thisArg);
}
var index = (0, _arrayIndexes.findIndexInIndexes)(indexes, callback, arr, thisArg);
if (index < 0) {
return;
}
return arr[index];
}
function getIndex(props, arr, indexName, key) {
var indexes = props.indexes;
if (!indexes || !indexName) {
return key ? -1 : undefined;
}
if (!indexes.has(indexName)) {
return key ? -1 : undefined;
}
function getIndexInIndex(key) {
var index = (0, _arrayIndexes.getIndexInIndexes)(indexes, indexName, key);
return index;
}
return key ? getIndexInIndex(key) : getIndexInIndex;
}
function get(props, arr, indexName, key) {
if (!key && typeof indexName == 'number') {
return arr[indexName];
}
var indexes = props.indexes;
if (!indexes || !indexName) {
return;
}
if (!indexes.has(indexName)) {
return;
}
function getInIndex(key) {
var index = (0, _arrayIndexes.getIndexInIndexes)(indexes, indexName, key);
if (index < 0) {
return;
}
return arr[index];
}
return key ? getInIndex(key) : getInIndex;
}
function has(props, arr, indexName, key) {
var indexes = props.indexes;
if (!indexes || !indexName) {
return false;
}
if (!indexes.has(indexName)) {
return false;
}
function hasInIndex(key) {
return indexes.get(indexName).has(key);
}
return key ? hasInIndex(key) : hasInIndex;
}