use-on-demand
Version:
238 lines • 8.17 kB
JavaScript
import { __read, __spread } from "tslib";
var xX_SArray_Helper = /** @class */ (function () {
function xX_SArray_Helper() {
}
/**
* 获取数组中符合条件的元素的索引
* @param arr 数组
* @param fn 一个函数,如果函数返回true,则返回该项的下标,如果没有找到则返回-1
*/
xX_SArray_Helper.getIndex_fromRule = function (arr, fn) {
if (!arr || arr.length == 0 || !fn || (typeof fn != 'function')) {
return -1;
}
if (arr.findIndex) {
return arr.findIndex(fn);
}
var len = arr.length;
var i = 0;
var index = -1;
for (; i < len; i++) {
var item = arr[i];
if (fn(item, index, arr) === true) {
index = i;
break;
}
}
return index;
};
/**
* 数组去重。 (第一种方法)
*/
xX_SArray_Helper.noRepeat_rtnNew = function (rawArr) {
return __spread(new Set(rawArr)); // 快速去重
};
/**
* 数组去重 (第二种方法)
* @param arr 需要去重的数组
* @param _isObjectValue 数组的值是否是引用类型
*/
xX_SArray_Helper.getNewArray_NoRepeat = function (arr, _isObjectValue) {
if (!arr || arr.length === 0) {
return arr;
}
// noinspection PointlessBooleanExpressionJS
var isObjectValue = typeof _isObjectValue === 'undefined' ? false : !!_isObjectValue;
var arrLen = arr.length;
var newArr = [];
// 值类型的数组,使用对象属性唯一的特性来去重
if (!isObjectValue) {
var obj = {};
for (var i = 0; i < arrLen; i++) {
obj[arr[i]] = 1;
}
for (var attr in obj) {
if (Object.prototype.hasOwnProperty.call(obj, attr)) {
newArr.push(attr);
}
}
return newArr;
}
newArr.push(arr[0]);
for (var i = 1; i < arrLen; i++) {
var item = arr[i];
var repeat = false;
for (var j = 0; j < newArr.length; j++) {
if (item === arr[j]) {
repeat = true;
break;
}
}
if (!repeat) {
newArr.push(item);
}
}
return newArr;
};
/**
* 转换数组中的对象,如:
* convertObjectInArr(
* [{id: 1,name: "张三"},{id: 2,name: "李四"}],
* {id: "value", name: "text"},
* true,
* )
* => [{value: 1,text: "张三"},{value: 2,text: "李四"}]
* @param arr {Array} 需要转换的数组
* @param keyConvertPair {Object} 一个对象
* @param delOriginAttrValue {Boolean} 是否删除原来的属性
* @return arr {Array} 返回转换后的数组
*/
xX_SArray_Helper.convertObjectKey_InOriginArr = function (arr, keyConvertPair, delOriginAttrValue) {
if (!arr || arr.length == 0) {
return;
// return arr;
}
arr.forEach(function (item) {
// eslint-disable-next-line
for (var attr in item) {
if (Object.prototype.hasOwnProperty.call(item, attr)) {
for (var origin_1 in keyConvertPair) {
if (Object.prototype.hasOwnProperty.call(keyConvertPair, origin_1)) {
if (origin_1 in item) {
item[keyConvertPair[origin_1]] = item[origin_1];
// eslint-disable-next-line
if (!!delOriginAttrValue) {
delete item[origin_1];
}
}
}
}
}
}
});
return;
// return arr;
};
//
//
//
//
//
//
//
//
//
//
//
/**
* TODO ∑,累加求和公式。(应用场景,深度图 求和 )
*
* 算法:原始 arr
* // 返回新数组,存储:每一个都是∑1 ∑2 ∑3 的计算结果。
* return [arr[0], arr[0]+arr[0], arr[0]+arr[1]+arr[2], ...];
* @param seriesArr
*/
xX_SArray_Helper.get_NewArray_Accumulate_SigmaSummary = function (seriesArr) {
if (({}).toString.call(seriesArr) != '[object Array]') {
return JSON.parse(JSON.stringify(seriesArr)); // 拷贝一下,防止干扰到原数组。
}
if (seriesArr.length == 1) {
return JSON.parse(JSON.stringify(seriesArr)); // 拷贝一下,防止干扰到原数组。
}
// 用于存储每一步计算的结果
var cache = [];
var resultArr = [];
seriesArr.forEach(function (item, index) {
if (cache) {
if (index == 0) {
resultArr.push(item);
cache[index] = item;
}
else {
var sum = 0;
// 如果前一个索引的值在缓存中,则从缓存中取
if (((index - 1) + '') in cache) {
sum = cache[index - 1] + item;
}
else {
// 如果前一个索引不在缓存中,则直接循环计算
for (var i = 0; i <= index; i++) {
sum += seriesArr[i];
}
}
resultArr.push(sum);
// 将当前索引及值添加到缓存中,以备后续使用
cache[index] = sum;
}
}
});
cache = null;
return resultArr;
};
/**
* 随机打乱数组。(洗牌)
* 1.参考资料:[javascript - How can I shuffle an array? - Stack Overflow](https://stackoverflow.com/a/6274381/6264260)
*/
xX_SArray_Helper.shuffle_rtnNew = function (rawArr) {
var j;
var x;
var i;
var newArr = __spread(rawArr);
for (i = newArr.length - 1; i > 0; i--) {
j = Math.floor(Math.random() * (i + 1));
x = newArr[i];
newArr[i] = newArr[j];
newArr[j] = x;
}
return newArr;
};
xX_SArray_Helper.removeItem_onOrigin_and_rtnOrigin = function (arr, value, findAll) {
if (findAll === void 0) { findAll = false; }
if (findAll) {
var i = 0;
while (i < arr.length) {
if (arr[i] === value) {
arr.splice(i, 1);
}
else {
// ++i;
i += 1;
}
}
return arr;
}
else {
var index = arr.indexOf(value);
if (index > -1) {
arr.splice(index, 1);
}
return arr;
}
};
/**
* 创建,数字的顺序数组
*
* 参考资料:
* https://stackoverflow.com/a/33352604/6264260
*
*/
xX_SArray_Helper.get_numberRange_arr = function (len, start, step) {
// 方式一
//=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// Array.from(Array(10).keys());
if (start === void 0) { start = 0; }
if (step === void 0) { step = 1; }
// 方式二
//=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
// [...Array(10).keys()];
var arr = Array.from({
length: len,
}, function (_, i) {
return (i * step) + start;
});
return arr;
};
return xX_SArray_Helper;
}());
export { xX_SArray_Helper };
//# sourceMappingURL=SArray_Helper.js.map