tree-structure-merging
Version:
```javascript npm i tree-structure-merging ```
151 lines (150 loc) • 6.27 kB
JavaScript
let treeDate = {
// 比较排序
compare: function (p) {
return function (m, n) {
let a = m[p];
let b = n[p];
if (a < b) {
return -1;
} else if (a > b) {
return 1;
} else {
return 0;
};
};
},
// 让相同数据合并并且进行排序
SameTreeData: function (data, element, sortElement = null) {
let dataInfo = {};
data.forEach(item => {
if (!dataInfo[item[element]]) {
dataInfo[item[element]] = {
[`${element}`]: item[element],
children: []
}
}
dataInfo[item[element]].children.push(item);
});
let list = Object.values(dataInfo);
if (sortElement != undefined || sortElement != null || sortElement != "") {
list.sort(this.compare(sortElement));
};
return (list);
}
};
let time = {
// 获取两个日期之间还有几天
diffDays: function (date, otherDate) {
return Math.ceil(Math.abs(date - otherDate) / (1000 * 60 * 60 * 24));
},
// 将日期转换成YYYY-MM-DD格式
formatYmd: function (date) {
return date.toISOString().slice(0, 10);
},
dateChange: function (data, str, format) {
if (str === null || str === undefined || str.trim() === "") {
throw Error("Give me an empty character. What do you want me to convert?");
}
if (data === null || data === undefined) {
throw Error(`Converted data cannot be ${Object.prototype.toString.call(data).slice(8,-1)}!`)
} else if (data === "") {
throw Error("Data cannot be empty!");
} else {
if (Object.prototype.toString.call(data) === "[object Array]") {
data.map(item => {
if (item[str] === undefined) {
throw Error(`Cannot find key name ${str}`);
}
item[str] = this.timeChange(item[str], format);
if (item.chiidren) {
this.dateChange(item.chiidren, str, format)
}
});
} else if (Object.prototype.toString.call(data) === "[object Object]") {
if (data[str] === undefined) {
throw Error(`Cannot find key name ${str}`);
}
data[str] = this.timeChange(data[str], format);
} else if (Object.prototype.toString.call(data) === "[object Date]" || Object.prototype.toString.call(data) === "[object String]") {
format = arguments[1];
data = this.timeChange(data, format);
}
return data;
};
},
timeChange: function (str, format) {
if (format === null || format === undefined || format.trim() === "") {
throw Error("If format is empty, what do you use to do?");
};
return `${/yyyy/.test(format)?str.getFullYear():''}${/yyyy/.test(format) && /mm/.test(format)?"-":""}${/mm/.test(format)?str.getMonth()+1>=10?str.getMonth()+1:'0'+(str.getMonth()+1):""}${/mm/.test(format) && /dd/.test(format)?"-":""}${/dd/.test(format)?str.getDate()>=10?str.getDate():'0'+str.getDate():""}${/hh/.test(format) || /ff/.test(format) || /ss/.test(format)?" ":""}${/hh/.test(format)?str.getHours()>=10?str.getHours():"0"+str.getHours():""}${/hh/.test(format) && /ff/.test(format)?":":""}${/ff/.test(format)?str.getMinutes()>=10?str.getMinutes():'0'+str.getMinutes():""}${/ff/.test(format) && /ss/.test(format)?":":""}${/ss/.test(format)?str.getSeconds()>=10?str.getSeconds():"0"+str.getSeconds():""}`;
}
};
let Money = {
// 数字金额转中文
toChineseNum: function (num) {
let Bit = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", ];
let AfterBit = ["", "十", "百", "千", "万"];
num = parseInt(num);
let getMoney = (temp) => {
let strArr = temp.toString().split("").reverse();
let newNum = "";
for (var i = 0; i < strArr.length; i++) {
newNum = (i == 0 && strArr[i] == 0 ? "" : i > 0 && strArr[i] == 0 && strArr[i - 1] == 0 ? "" : Bit[strArr[i]] + (strArr[i] == 0 ? AfterBit[0] : AfterBit[i])) + newNum;
};
return newNum;
};
let tenThousand = Math.floor(num / 10000);
let noThousand = num % 10000;
if (noThousand.toString().length < 4) {
noThousand = "0" + noThousand;
}
return tenThousand ? getMoney(tenThousand) + "万" + getMoney(noThousand) : getMoney(num);
},
// 单选计算总价与总数量
totalPrice: function (data, price, num, clicked = null) {
let totalPrice = null;
let totalNum = null;
if (clicked === null || clicked === undefined || clicked.trim() === "") {
data.map(item => {
clicked = "clicked";
item[clicked] = false;
});
}
data.map(item => {
item.count = item[price] * item[num];
if (item[clicked]) {
totalPrice += item.count;
totalNum += item[num];
};
});
data.totalPrice = totalPrice;
data.totalNum = totalNum;
return data;
},
// 全选计算总价与数量
selectAll: function (data, price, num, clicked = null) {
let totalPrice = null;
let totalNum = null;
let allClick = data.every(item => {
return item[clicked]
});
if (allClick) {
data.map(item => {
item.count = item[price] * item[num];
totalPrice += item.count;
totalNum += item[num];
});
} else {
totalPrice = 0;
totalNum = 0;
};
data.totalPrice = totalPrice;
data.totalNum = totalNum;
return data;
}
};
module.exports = {
treeDate,
time,
Money
}