排序,去重,数组转成tree结构数组,根据指定节点获取所有父级
1. 数组排序
var arr1 = [15, 8, 25, 3];
arr1.sort(function(a, b){
return a - b;
})
console.log('非对象数组排序-从小到大:' + JSON.stringify(arr1))
var arr2 = [15, 8, 25, 3];
arr2.sort(function(a, b){
return b - a;
})
console.log('非对象数组排序-从大到小:' + JSON.stringify(arr2))
var arr3 = [
{
age: 60},
{
age: 3},
{
age: 30},
{
age: 9},
];
arr3.sort(function(a, b){
return a.age - b.age;
})
console.log('对象数组排序-从小到大:' + JSON.stringify(arr3))
2. 数组去重
function uniqueArrByObj (oldArr, key) {
var newArr = [];
var obj = {
};
for(var i =0; i<oldArr.length; i++){
if(!obj[oldArr[i][key]]){
newArr.push(oldArr[i]);
obj[oldArr[i][key]] = true;
}
}
return newArr;
}
function unique1 (oldArr) {
var newArr=[];
for (var i = 0; i < oldArr.length; i++) {
if(newArr.indexOf(oldArr[i])==-1){
newArr.push(oldArr[i]);
}
}
return newArr;
}
function uniqueArrBySet (oldArr) {
var newArr = new Set(oldArr);
return [...newArr];
}
var objArr = [
{
name: '张三', age: 24},
{
name: '李四', age: 25},
{
name: '张三', age: 26},
{
name: '赵六', age: 29},
]
console.log('对象数组去重:' + JSON.stringify(uniqueArrByObj(objArr, 'name')))
var arr = [2, 25, 36, 2, '36', '3']
console.log('非对象数组去重:' + JSON.stringify(unique1(arr)))
console.log('非对象数组去重,Set实现:' + JSON.stringify(uniqueArrBySet(arr)))
3. 数组转成tree结构
var menuList = [
{
"id": "1002",
"name": "用户权限",
"type": "1",
"parentId": "",
"state": 1,
"menuCode": "B001",
"menuIcon": "iconfont icon-quanxianguanli",
"menuUrl": "user-authority",
"sort": 4
},
{
"id": "1002001",
"name": "用户档案",
"type": "2",
"parentId": "1002",
"state": 1,
"menuCode": "B002",
"menuIcon": "iconfont icon-yonghu",
"menuUrl": "user-list",
"sort": 0
},
{
"id": "1002002",
"name": "角色权限",
"type": "2",
"parentId": "1002",
"state": 1,
"menuCode": "B003",
"menuIcon": "iconfont icon-permissions-list",
"menuUrl": "role-list",
"sort": 0
},
{
"id": "1002003",
"name": "菜单管理",
"type": "2",
"parentId": "1002",
"state": 1,
"menuCode": "B004",
"menuIcon": "iconfont icon-caidan",
"menuUrl": "menu-list",
"sort": 0
},
{
"id": "1003",
"name": "基础资料",
"type": "1",
"parentId": "",
"state": 1,
"menuCode": "C001",
"menuIcon": "iconfont icon-jichuziliao",
"menuUrl": "base-list",
"sort": 5
},
{
"id": "1003001",
"name": "公司档案",
"type": "2",
"parentId": "1003",
"state": 1,
"menuCode": "C002",
"menuIcon": "iconfont icon-gongsixinxi",
"menuUrl": "corp-list",
"sort": 0
},
{
"id": "1003002",
"name": "店铺档案",
"type": "2",
"parentId": "1003",
"state": 1,
"menuCode": "C003",
"menuIcon": "iconfont icon-dianpu",
"menuUrl": "shop-list",
"sort": 0
},
{
"id": "1003003",
"name": "商品档案",
"type": "2",
"parentId": "1003",
"state": 1,
"menuCode": "C004",
"menuIcon": "iconfont icon-ziliaoku",
"menuUrl": "goods-list",
"sort": 0
}
]
var toTreeData = function(data, attributes) {
let resData = data;
let tree = [];
for(let i = 0; i < resData.length; i++) {
resData[i].children = resData[i].children || [];
if(!resData[i][attributes.parentId] || resData[i][attributes.parentId] === '0') {
tree.push(JSON.parse(JSON.stringify(resData[i])));
resData.splice(i, 1);
i--;
}
}
var run = function(chiArr) {
if(resData.length !== 0) {
for(let i = 0; i < chiArr.length; i++) {
for(let j = 0; j < resData.length; j++) {
if(chiArr[i][attributes.id] === resData[j][attributes.parentId]) {
let obj = JSON.parse(JSON.stringify(resData[j]));
if (!chiArr[i].children) {
chiArr[i].children = []
}
chiArr[i].children.push(obj);
resData.splice(j, 1);
j--;
}
}
run(chiArr[i].children);
}
}
}
run(tree);
return tree;
}
let attributes = {
id: 'id',
parentId: 'parentId',
};
let treeData = toTreeData(menuList, attributes);
console.log(JSON.stringify(treeData));
4.根据指定节点获取所有父级
var getParentList = function (tree, func, path = []) {
if (!tree) return []
for (const data of tree) {
path.push(data.value)
if (func(data)) return path
if (data.children) {
const findChildren = getParentList(data.children, func, path)
if (findChildren.length) return findChildren
}
path.pop()
}
return []
}
var oldList = [{
"label":"链接栏目","value":"1334057558398222371","parentvalue":"0","children":[]},{
"label":"测试","value":"1334059448418713656","parentvalue":"0","children":[]},{
"label":"列表模板","value":"1334061078203613251","parentvalue":"0","children":[{
"label":"列表模板1","value":"1334061222558974015","parentvalue":"1334061078203613251","children":[]}]},{
"label":"封面模板","value":"1334061443204530180","parentvalue":"0","children":[]}]
var newList= getParentList(oldList , dataRes=> dataRes.value==="1334061222558974015")
console.log(newList)