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. 通用脱敏
我们在处理后端传过来的手机号或者订单号需要进行 脱敏展示
。
// 通用脱敏
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