1、把parent转为一维数组 :
[
{
"ccompanyId": 503,
"ccompanyName": "上海张江动漫科技有限公司",
"parent": [
{
"ccompanyId": 22,
"ccompanyName": "上海张江文化控股有限公司",
"parent": [
{
"ccompanyId": 1,
"ccompanyName": "上海张江(集团)有限公司"
}
]
}
]
}
]
// 把parent转为一维数组 ok
jsonToArray(nodes) {
var r = [];
if (Array.isArray(nodes)) {
for (var i = 0, l = nodes.length; i < l; i++) {
r.push(nodes[i]); // 取每项数据放入一个新数组
if (
Array.isArray(nodes[i]["parent"]) &&
nodes[i]["parent"].length > 0
)
// 若存在parent则递归调用,把数据拼接到新数组中,并且删除该parent
r = r.concat(this.jsonToArray(nodes[i]["parent"]));
delete nodes[i]["parent"];
}
}
return r;
},
2、数组去重
// 根据key值,数组去重开始
for (let i = 0; i < cc.length; i++) {
for (let j = i + 1; j < cc.length; j++) {
if (cc[i].key == cc[j].key) {
//第一个等同于第二个,splice方法删除第二个
cc.splice(j, 1);
j--;
}
}
}
3、 一维数组转为树形结构
// search数据转为树
searchtoTree(data) {
let result = [];
if (!Array.isArray(data)) {
return result;
}
data.forEach((item) => {
if (!item.hasOwnProperty("children")) {
item.children = [];
}
});
let map = {};
data.forEach((item) => {
map[item.key] = item;
});
data.forEach((item) => {
let parent = map[item.parkey];
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
result.push(item);
}
});
return result;
},
4、递归排序 按持股比例大到小排序,相同时按注册资金排序
cardorderby(data, key, registeredCapital) {
data.sort(this.orderby(key, registeredCapital));
data.forEach((item, index) => {
if (item.children.length > 0) {
item.children.sort(
this.cardorderby(item.children, key, registeredCapital)
);
}
});
},
5、//翻转数组
fanzhuan(data) {
data.reverse();
data.forEach((item, index) => {
if (item.children.length > 0) {
this.fanzhuan(item.children);
}
});
return data;
},
6、往数组里面添加字段
assetaddAttr(data) {
// console.log(data,"222222222222")
data.forEach((item, index) => {
// var ff = item.assetDetail;
// console.log(ff,"fffffffffffffffffffff")
if (item.hasOwnProperty("asset") && item.asset.length > 0) {
item.asset.forEach((itemasset) => {
itemasset.asset = [];
// itemasset.assetDetail = [...ff];
itemasset.children = [];
itemasset.level = item.level + 1;
itemasset.isopen = true;
itemasset.isshow = true;
//添加是否有分公司 111111111111111111111111111111111111
// itemasset.Isfengs=0;
});
}
// else{
// item.asset=[];
// }
if (item.children.length > 0) {
this.assetaddAttr(item.children);
}
// return item;
});
return data;
},
7、把某条数据放在数组的最后面
//把分公司放在数据的最后面
fengongsibyorder(data) {
data.forEach((item, index) => {
if (item.Isfengs == 1) {
data.unshift(data.splice(index, 1)[0]);
}
if (item.children.length > 0) {
this.fengongsibyorder(item.children);
}
});
return data.reverse();
},
8、
this.$forceUpdate()
this.$set( target, key, value )
vue 强制更新数据 this.$forceUpdate() - 秋风2016 - 博客园
Vue中Vue.set()和this.$forceUpdate()的使用_styleforgive的博客-CSDN博客
Vue中Vue.set()和this.$forceUpdate()的使用_styleforgive的博客-CSDN博客
//5减号函数
minus(item, index) {
let self = this;
let ccompanyId = item.ccompanyId;
if (item.childfengsTotal > 0) {
let shaixunfendata = this.shaixunfendata(this.list[ccompanyId]);
this.$set(this.list, ccompanyId, shaixunfendata);
} else {
this.$forceUpdate();
this.$set(this.list, ccompanyId, []);
}
this.$set(this.secColumn[index], "isopen", false);
self.$nextTick(() => {
self.$refs["listDom" + index][0].initDom(this.list[ccompanyId]);
});
},
9、 this.$nextTick()
self.$nextTick(() => {
self.$refs["listDom" + index][0].initDom(this.list[itemCcompanyId]);
});
//点击第二列加减号之后,往list里面添加对应的数据
changdataById(item, index) {
let self = this;
let itemCcompanyId = item.ccompanyId;
// console.log(itemCcompanyId, "22222itemCcompanyId22222222");
// 第二列数据isopen改为true
this.$forceUpdate();
this.$set(this.secColumn[index], "isopen", true);
let secColumndatas = JSON.parse(this.strsec);
this.list[itemCcompanyId] = secColumndatas[index].children;
self.$nextTick(() => {
self.$refs["listDom" + index][0].initDom(this.list[itemCcompanyId]);
});
},
10、trim()
11、删除
//删除没有搜索到的物业资产
deleWuye(data) {
// console.log(data, "deleWuye");
data.forEach((item) => {
let xinasset = [];
// let xinassetDetail = [];
item.asset.forEach((element, index) => {
if (element.PROJECT_NAME.indexOf("style") != -1) {
// console.log(item.asset[index], "item.asset[index]");
xinasset.push(element);
// xinassetDetail.push(item.assetDetail[index]);
}
});
item.asset = xinasset;
// item.assetDetail = xinassetDetail;
if (item.parent.length > 0) {
this.deleWuye(item.parent);
}
});
// console.log(data, "1111111");
return data;
},
12、添加颜色
// 添加背景色
addcolor(data) {
data.forEach((item, index) => {
let reginputvalue = this.reginputvalue;
let content = item.ccompanyName;
// 如果有小括号把里面的小括号换成xiaokhq\xiaokhh ,处理好之后在改回来
let reg = /[\(]/g,
reg2 = /[\)]/g;
reginputvalue = reginputvalue
.replace(reg, "xiaokhq")
.replace(reg2, "xiaokhh");
content = content.replace(reg, "xiaokhq").replace(reg2, "xiaokhh");
if (this.keywordType == "wuyekeyword") {
item.asset.forEach((element, index) => {
let wuyeName = element.PROJECT_NAME;
let elementPROJECT_NAME = wuyeName.replace(
new RegExp(reginputvalue, "g"),
'<span style="background-color: yellow;color:red;">$&</span>'
);
element.PROJECT_NAME = elementPROJECT_NAME
.replace(/xiaokhq/g, "(")
.replace(/xiaokhh/g, ")");
});
} else {
let itemccompanyName = content.replace(
new RegExp(reginputvalue, "g"),
'<span style="background-color: yellow;color:red;">$&</span>'
);
item.ccompanyName = itemccompanyName
.replace(/xiaokhq/g, "(")
.replace(/xiaokhh/g, ")");
// console.log(item.ccompanyName,"item.ccompanyName")
}
// if (item.children.length > 0) {
// this.addcolor(item.children);
// }
});
// console.log(data, "1111111");
return data;
},
13、排序把带有颜色的放在数组的前面
yiweidatas.forEach((item, index) => {
if (
item.ccompanyName.indexOf("background-color: yellow;color:red;") > -1
) {
yiweidatas.unshift(item);
yiweidatas.splice(index, 1);
}
});
14、递归排序 按持股比例大到小排序,相同时按注册资金排序
orderby(key, registeredCapital) {
return function(value1, value2) {
var val1 = value1[key];
var val2 = value2[key];
var reg1 = value1[registeredCapital];
var reg2 = value2[registeredCapital];
if (!isNaN(Number(val1)) && !isNaN(Number(val2))) {
val1 = Number(val1);
val2 = Number(val2);
}
if (!isNaN(Number(reg1)) && !isNaN(Number(reg2))) {
reg1 = Number(reg1);
reg2 = Number(reg2);
}
if (val1 == val2) {
if (reg1 > reg2) {
return -1;
} else if (reg1 < reg2) {
return 1;
} else {
return 0;
}
} else if (val1 > val2) {
return -1;
} else {
return 1;
}
};
},