前端常用的数据处理(基础版)
1、字符串、数组互转
//字符串转数组
let str = '一公司,二公司,三公司';
console.log(str.split(',')); //['一公司,二公司,三公司']
// console.log(Array.from(str));
// console.log([...str]);
//数组转字符串 let strArr = ['一公司','二公司','三公司']; console.log(strArr.join());//一公司,二公司,三公司 // console.log(strArr.toString());
2、数组、对象互转
//数组转对象
const arr = [
{ label: '男', value: 0 },
{ label: '女', value: 1 }
];
const arrObj = {};
for(let i = 0; i < arr.length; i++) {
arrObj[arr[i].value] = arr[i].label;
}
console.log(arrObj);
//{0: '男', 1: '女'}
//对象转数组
const obj = { 0: '男', 1: '女' };
let objArr = [];
for (let key in obj) {
objArr.push({ label: obj[key], value: +key })
}
console.log(objArr);

3、数组合并、对象合并
//数组合并 let m1 = ['js', 'es', 'ts'], m2 = ['vue','react']; let mergeM = m1.concat(m2); console.log(mergeM); //['js', 'es', 'ts', 'vue', 'react']
//对象合并
let o1 = { a: 1, b: 2 }, o2 = { c: 3, d: 4 };
let mergeO = Object.assign(o1, o2);
console.log(mergeO);
//{a: 1, b: 2, c: 3, d: 4}
4、判断是否是空数组、空对象
//判断是否是空数组
let a1 = [], a2 = [1,2,3];
function isArray(arr) {
if (arr instanceof Array && arr.length === 0) return true;
return false;
}
console.log(isArray(a1));//true
console.log(isArray(a2));//false
//判断是否是空对象-利用hasOwnProperty
let u1 = {}, u2 = { p:9 };
function isObject(obj) {
for(let key in obj) {
//如果有key属性代表不是一个空对象,返回false
if (obj.hasOwnProperty(key)) return false;
}
return true;
}
console.log(isObject(u1));//true
console.log(isObject(u2));//false
//判断是否是空对象-利用Object.keys
function isObject2(obj) {
if (Object.keys(obj).length === 0) return true;
return false;
}
console.log(isObject2(u1));//true
console.log(isObject2(u2));//false
5、将时间戳转成日期格式
function getExactTime(time) {
//时间戳为10位需*1000,时间戳为13位的话不需乘1000
// var date = new Date(time);
var date = new Date(time * 1000);
var year = date.getFullYear() + '年';
var month = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '月';
var day = date.getHours() + '日';
var hour = date.getDate() + '时';
var min = date.getMinutes() + '分';
var second = date.getSeconds() + '秒';
return year + month + day + hour + min + second;
}
console.log(getExactTime(1651373079));
//2022年05月10日1时44分39秒
6、数组去重
//第一种
let fiveNumber = [1,2,3,3,2,1,1,2,3,4,5,6,7];
function unique1(fiveNumber) {
let s = new Set(fiveNumber);
return Array.from(s);
}
function unique2(fiveNumber){
return fiveNumber.reduce((pre, cur) => {
return pre.includes(cur) ? pre : pre.concat(cur);
}, [])
}
console.log(unique1(fiveNumber));
console.log(unique2(fiveNumber));
//[1, 2, 3, 4, 5, 6, 7]
//第二种
const jordan = [
{ goodsId: '1', user: 'jack', uniId: 20 },
{ goodsId: '2', user: 'tom', uniId: 20 },
{ goodsId: '1', user: 'jack', uniId: 20 },
{ goodsId: '3', user: 'rose', uniId: 20 },
{ goodsId: '1', user: 'jack', uniId: 20 },
]
function uniqueJordan(jordan) {
let obj = {};
return jordan.reduce((pre, cur) => {
obj[cur.goodsId] ? '' : obj[cur.goodsId] = true && pre.push(cur);
return pre;
}, [])
}
console.log(uniqueJordan(jordan))

7、数组扁平化
let six = [1, [2, [3, 4]],[5,6],[7]];
function flatten(six) {
return six.reduce((pre, cur) => {
return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
}, [])
}
console.log(flatten(six));
//[1, 2, 3, 4, 5, 6, 7]
8、数字千分位格式化
let n = '1234567';
function formatNum(n) {
return n.split('').reverse().reduce((cur, next, index) => {
//看index是否能被3整除
return ((index % 3) ? next : (next + ',')) + cur
})
}
console.log(formatNum(n));//1,234,567
9、url参数转对象
let query = 'http://www.bd.com/?user=rose&id=123&pid=01&city=beijing';
function getQueryParams(query) {
/*
?user=rose&id=123&pid=01&city=beijing
[?&] 带有?和&的
[^?&]+= 非问号&号的(多个)和等号
*/
const result = {};
const reg = /[?&][^?&]+=[^?&]+/g;
const found = query.match(reg);
if (found) {
found.forEach(item => {
let temp = item.substring(1).split('=');
console.log(temp, 'LOG')
let key = temp[0], val = temp[1];
result[key] = val;
})
}
return result;
}
console.log(getQueryParams(query));
//{user: 'rose', id: '123', pid: '01', city: 'beijing'}
10、一维数组转树形结构
let data = [
{ id: 1, parent: null, text: '菜单1' },
{ id: 11, parent: 1, text: '菜单1-1' },
{ id: 12, parent: 1, text: '菜单1-2' },
{ id: 2, parent: null, text: '菜单2' },
{ id: 21, parent: 2, text: '菜单2-1' },
{ id: 22, parent: 2, text: '菜单2-2' }
]
function jsonTree(data, p, list) {
for (let item of data) {
if (item.parent == p) list.push(item);
}
console.log(list, '-----')
for (let i of list) {
i.children = [];
//递归
jsonTree(data, i.id, i.children);
if(i.children.length == 0) delete i.children;
}
return list;
}
//调用的三个参数分别为源数据、父级节点的标识、默认[]
//jsonTree(data, null, []);
console.log(jsonTree(data, null, []));


浙公网安备 33010602011771号