jslib-tools
Version:
js工具库 封装常用的工具函数 如深拷贝 时间转换日期格式化、浏览器判断等,提高开发效率
190 lines (151 loc) • 8.24 kB
HTML
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: obj/array/array.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: obj/array/array.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>/*
* @Author: zhangyu
* @Email: zhangdulin@outlook.com
* @Date: 2021-06-25 11:30:34
* @LastEditors: zhangyu
* @LastEditTime: 2021-07-28 14:17:37
* @Description:
*/
import { isFunc } from '../../judgement/index'
/**
* @description: 数组转对象
* @param {string} key
* @param {any} arr
* @return {object}
*/
export function arrayToObject(key, arr) {
const mapping = {};
arr.forEach((item) => {
if (item[key]) {
mapping[item[key]] = item
}
})
return mapping
}
/**
* 引用数组位移,性能优化
* @param {*} array
* @param {number} from
* @param {number} to
*/
export function arrayMoveMutate(array, from, to) {
const startIndex = from < 0 ? array.length + from : from;
if (startIndex >= 0 && startIndex < array.length) {
const endIndex = to < 0 ? array.length + to : to;
const [item] = array.splice(from, 1);
array.splice(endIndex, 0, item);
}
}
/**
* 数组位移
* @param {array} array
* @param {number} from
* @param {number} to
* @return {*}
* @example
```
const { arrayMove } = require('@alrale/common-lib');
const input = ['a', 'b', 'c'];
const array1 = arrayMove(input, 1, 2);
console.log(array1);
//=> ['a', 'c', 'b']
const array2 = arrayMove(input, -1, 0);
console.log(array2);
//=> ['c', 'a', 'b']
const array3 = arrayMove(input, -2, -3);
console.log(array3);
//=> ['b', 'a', 'c']
```
*/
export function arrayMove(array, from, to) {
const _array = [...array];
arrayMoveMutate(_array, from, to);
return _array;
}
/**
* 按条件产生数组 arr(5,2,2) => [2,4,6,8,10]
* eg:按1-10项产生斐波那契数列 =>arr(10, function (value, i, list) { return i > 1 ? list[i - 1] + list[i - 2] : 1; })
* @param {number} length 要产生的数组长度
* @param {number} value 数组项的初始值
* @param {number} step 递增值或处理函数(当前值,索引,当前产生的数组)
*/
export function arrFibonacci(length, value, step) {
if (isFunc(value)) {
step = value;
value = 0;
}
if (value == undefined) value = 0;
if (step == undefined) step = 1;
var list = [], i = 0;
if (isFunc(step)) {
while (i < length) {
value = step(value, i, list);
list.push(value);
i++;
}
} else {
while (i < length) {
list.push(value);
value += step;
i++;
}
}
return list;
}
/**
* 根据指定的键或索引抽取数组项的值
* eg:vals([{id:1},{id:2}], "id") => [1,2]
* eg:vals([[1,"a"],[2,"b"]], 1) => ["a","b"]
* @param {array} list 对象数组
* @param {string} prop 要抽取的属性
* @param {boolean} skipUndefined 是否跳过值不存在的项,默认为true
*/
export function arrVals(list, prop, skipUndefined) {
if (!list) return [];
skipUndefined = skipUndefined !== false;
var len = list.length,
i = 0,
item,
tmp = [];
for (; i < len; i++) {
item = list[i];
if (item && item[prop] != undefined) {
tmp.push(item[prop]);
} else if (!skipUndefined) {
tmp.push(undefined);
}
}
return tmp;
}</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#alias">alias</a></li><li><a href="global.html#arrayMove">arrayMove</a></li><li><a href="global.html#arrayMoveMutate">arrayMoveMutate</a></li><li><a href="global.html#arrayToObject">arrayToObject</a></li><li><a href="global.html#arrayToTree">arrayToTree</a></li><li><a href="global.html#arrFibonacci">arrFibonacci</a></li><li><a href="global.html#arrVals">arrVals</a></li><li><a href="global.html#callHandler">callHandler</a></li><li><a href="global.html#camelize">camelize</a></li><li><a href="global.html#checkInt">checkInt</a></li><li><a href="global.html#checkNum">checkNum</a></li><li><a href="global.html#clipboardObj">clipboardObj</a></li><li><a href="global.html#compareSize">compareSize</a></li><li><a href="global.html#cookie">cookie</a></li><li><a href="global.html#cursortPosition">cursortPosition</a></li><li><a href="global.html#dasherize">dasherize</a></li><li><a href="global.html#dateFormat1">dateFormat1</a></li><li><a href="global.html#dateFormat2">dateFormat2</a></li><li><a href="global.html#debounce">debounce</a></li><li><a href="global.html#decode_url_param">decode_url_param</a></li><li><a href="global.html#def">def</a></li><li><a href="global.html#elDateFormat">elDateFormat</a></li><li><a href="global.html#escapeHTML">escapeHTML</a></li><li><a href="global.html#exportXls">exportXls</a></li><li><a href="global.html#extend">extend</a></li><li><a href="global.html#getBrowserModel">getBrowserModel</a></li><li><a href="global.html#getChangedData">getChangedData</a></li><li><a href="global.html#getChildren">getChildren</a></li><li><a href="global.html#getCookie">getCookie</a></li><li><a href="global.html#getDefaultAvatar">getDefaultAvatar</a></li><li><a href="global.html#getDeviceModel">getDeviceModel</a></li><li><a href="global.html#getHttpBase64">getHttpBase64</a></li><li><a href="global.html#getImgBase64">getImgBase64</a></li><li><a href="global.html#getThumbnails">getThumbnails</a></li><li><a href="global.html#getType">getType</a></li><li><a href="global.html#handleEmoji">handleEmoji</a></li><li><a href="global.html#handleParam">handleParam</a></li><li><a href="global.html#handleText">handleText</a></li><li><a href="global.html#isArray">isArray</a></li><li><a href="global.html#isArrayLike">isArrayLike</a></li><li><a href="global.html#isDiff">isDiff</a></li><li><a href="global.html#isFunc">isFunc</a></li><li><a href="global.html#isInt">isInt</a></li><li><a href="global.html#isNum">isNum</a></li><li><a href="global.html#isObject">isObject</a></li><li><a href="global.html#isObjEmpty">isObjEmpty</a></li><li><a href="global.html#isUInt">isUInt</a></li><li><a href="global.html#isUNum">isUNum</a></li><li><a href="global.html#makeArray">makeArray</a></li><li><a href="global.html#objectConversionToList">objectConversionToList</a></li><li><a href="global.html#objectToArray">objectToArray</a></li><li><a href="global.html#objTools">objTools</a></li><li><a href="global.html#parseTime">parseTime</a></li><li><a href="global.html#setVideoPlay">setVideoPlay</a></li><li><a href="global.html#sleepAction">sleepAction</a></li><li><a href="global.html#sleepSync">sleepSync</a></li><li><a href="global.html#sortMapByKey">sortMapByKey</a></li><li><a href="global.html#storage">storage</a></li><li><a href="global.html#throttle">throttle</a></li><li><a href="global.html#titleize">titleize</a></li><li><a href="global.html#toArray">toArray</a></li><li><a href="global.html#toLower">toLower</a></li><li><a href="global.html#toMap">toMap</a></li><li><a href="global.html#toObjectMap">toObjectMap</a></li><li><a href="global.html#toSimplifiedChinese">toSimplifiedChinese</a></li><li><a href="global.html#toUpper">toUpper</a></li><li><a href="global.html#unescapeHTML">unescapeHTML</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc/jsdoc">JSDoc 3.6.7</a> on Wed Aug 25 2021 17:57:45 GMT+0800 (GMT+08:00)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>