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 作者:前端代码王

(0)
上一篇 2023年4月23日 上午10:47
下一篇 2023年4月23日 上午10:57

相关推荐

发表回复

登录后才能评论