JS任意分离数组、相同元素累加、根据某个相同元素值 合并组成新的数组等实用的方法

JS任意分离数组、相同元素累加、根据某个相同元素值 合并组成新的数组

为了记录,方便自己查阅。如果有更好的方法,欢迎指教!

1. 任意分离数组

// 将数组分成多少个小数组  arr是原数组  length是想分的长度
setDivison(arr,length){
	let index = 0
    let newArray = []
    while (index < arr.length) {
       newArray.push(arr.slice(index, (index += length)))
    }
    return newArray
}

2. 相同元素累加

arr 是原数组,matchKey 是检测数组对象包含此key值得元素都分别进行累加
原数据
arr=[{title:“数据一”,num1:1,num2:2,num3:3},{title:“数据二”,num1:1,num2:2,num3:3}]
matchKey=[“num1”,"num2","num3"]

结果
let newObj = sameKeySummataion(arr, matchKey) 
newObj={"num1":2,"num2":4,"num3":6}
// 数组相同元素累加
sameKeySummataion(arr, matchKey) {
   let obj = {}
   arr.forEach((item) => {
      for (let key in item) {
        if (matchKey.indexOf(key) != -1) {
          let value = item[key]
          key in obj ? (obj[key] += Number(value)) : (obj[key] = Number(value))
        }
     }
   })
  // 这一步可省略  这里为了保留最终数据都包含两位小数点
  for (var i in obj) {
    obj[i] = obj[i].toFixed(2)
  }
  return obj
},

3. 根据数组某个相同元素值,重新生成新数组

原数组
arr = [
        { cityname: "上海市", area: "松江区", areaId: 123 },
        { cityname: "上海市", area: "静安区", areaId: 456 },
        { cityname: "上海市", area: "闵行区", areaId: 789 },
        { cityname: "武汉市", area: "洪山区", areaId: 321 },
        { cityname: "武汉市", area: "江夏区", areaId: 654 },
        { cityname: "武汉市", area: "武昌区", areaId: 987 },
      ]
 转换成的新数组
 newData=[
        {
          cityname: "上海市",
          children: [
            { area: "松江区", areaId: 123 },
            { area: "静安区", areaId: 456 },
            { area: "闵行区", areaId: 789 },
          ],
        },
        {
          cityname: "武汉市",
          children: [
            { area: "洪山区", areaId: 321 },
            { area: "江夏区", areaId: 654 },
            { area: "武昌区", areaId: 987 },
          ],
        },
      ],
 // 根据某个相同的值 合并组成新的数组 
 // data 是原数组
 sameValueConcat(data) {
    let dataInfo = {}
    data.forEach((item, index) => {
       let { cityname } = item
       if (!dataInfo[cityname ]) {
          dataInfo[cityname] = {
            cityname ,       
            children: [],
          }
       }
       dataInfo[cityname].children[] = item
    })
    let list = Object.values(dataInfo)
    return list
},

4. 通用脱敏

我们在处理后端传过来的手机号或者订单号需要进行 脱敏展示
原文: js通用脱敏方法.

// 通用脱敏
 Desensitization(str, beginLen, endLen) {
    let len = str.length;
    let firstStr = str.substr(0, beginLen);
    let lastStr = str.substr(endLen);
    let middleStr = str.substring(beginLen, len - Math.abs(endLen)).replace(/[\s\S]/ig, '*');
    let finalStr = firstStr + middleStr + lastStr;
    return finalStr;
  }
console.log(Desensitization('18212346789', 3, -4)) // 182****6789
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值