js引用对象深度复制
function aliasObjDeepCopy(alias = undefined) {
if (Array.isArray(alias)) {
return [...alias];
}
if (alias.constructor === Object) {
return JSON.parse(JSON.stringify(alias));
}
try {
throw new Error(["不支持的引用类型"]);
} catch (e) {
console.log(e);
}
}
js 数组快速分类
function classify(arr = [], paramName = [], resMap = new Map(), mode = "===") {
for (const key of resMap.keys()) {
arr.forEach(ele => {
const param = [...paramName];
const value = getDeepDataFromArrOrObj(ele, param);
// 如果为数组
if (Array.isArray(value) && mode === "===") {
if (value.includes(key)) {
resMap.get(key).push(ele);
}
} else {
try {
throw new Error(["不支持的类型"]);
} catch (e) {
console.log(e);
}
}
//其它类型和模式待添加
});
}
function getDeepDataFromArrOrObj(data, directArr = []) {
if (directArr.length === 0) {
return data;
}
const name = directArr.shift();
if (!data[name]) {
return name + "子项不存在";
}
if (Array.isArray(data[name]) || data[name].constructor === Object) {
return getDeepDataFromArrOrObj(data[name], directArr);
} else {
return data[name];
}
}
return resMap;
}
----使用-----
let m = new Map();
m.set(0, []);
m.set(1, []);
m.set(2, []);
m.set(3, []);
const res = this.classify(array, ["category"], m);
console.log(res);