Lodash-super 一款加强版的工具库(一)
前言
本文将介绍lodash-super
开源库。
这是一个 lodash
加强版的工具库,因为lodash
只提供了最基础的一些工具方法,当我们在业务上使用时,往往需要对其进行再次封装,比较麻烦。
所以,该库提供了一个在 业务场景中 更加 通用的工具库。
希望对你有所帮助!
希望大家点个star
,或者一同共建。
安装
npm install lodash-super
或 yarn add lodash-super
方法
_S.array2obj(array, key = "key", value = "value")
将 对象数组(由对象组成的数组) 转换成 对象
适用于标签列表,前端是标签数组,而后端需要标签对象
例子
const obj = _S.array2obj([{key:'label1',value:1},{key:'label2',value:2}])
// => {label1:1,label2:2}
const obj1 = _S.array2obj([{name:'label1',id:1},{name:'label2',id:2}],'name','id')
// => {label1:1,label2:2}
源码
/**
*
* @param {Array} array 待处理的数组
* @param {String} key 组成对象的键
* @param {String} value 组成对象的值
* @returns (Object): 返回生成的新对象
*/
function array2obj(array, key = "key", value = "value") {
const object = {};
if (!isArray(array)) {
return console.error("传入的不是数组");
}
for (let index = 0; index < array.length; index += 1) {
const item = array[index];
object[item[key]] = item[value];
}
return object;
}
export default array2obj;
_S.obj2array(obj, key = "key", value = "value")
将 对象 转换成 对象数组(由对象组成的数组)
与 _S.array2obj() 相反
(Array): 返回生成的新数组。
例子
const obj = _S.obj2array({label1:1,label2:2})
// => [{key:'label1',value:1},{key:'label2',value:2}]
const obj1 = _S.obj2array({label1:1,label2:2} ,'name','id')
// => [{name:'label1',id:1},{name:'label2',id:2}]
源码
/**
*
* @param {Object} obj 待处理的对象
* @param {String} key 组成对象的键
* @param {String} value 组成对象的值
* @returns (Array): 返回生成的新数组
*/
function obj2array(obj, key = "key", value = "value") {
const array = [];
Object.keys(obj).forEach((ikey) => {
const ivalue = obj[ikey];
array.push({
[key]: ikey,
[value]: ivalue,
});
});
return array;
}
_S.filterBy(array, key='id', value, name='name')
取出 对象数组 中满足的条件的那一项项 的指定的值
简化 filter 的取值
例子
const obj = _S.filterBy([{id:1,name:'1'},{id:2,name:'2'}], 'id', 1, 'name')
// => '1'
源码
/**
*
* @param {Array} array 待处理的数组
* @param {String} key 匹配 value 的对象的键
* @param {String} value 与 需要相等 的value值
* @param {any} name 需要获取的对象值
* @returns 获取到的 name 值
*/
function filterBy(array, key = "id", value, name = "name") {
const result = [];
if (!array.length) {
return result;
}
const arrayFilter = array.filter((item) => item[key] === value);
if (arrayFilter.length > 0) {
arrayFilter.forEach((item) => {
result.push(item[name]);
});
if (result.length <= 1) {
return result[0];
} else {
return result;
}
}
return undefined;
}
转载自:https://juejin.cn/post/7224840969789653050