2021-02-20 js 把平级列表数据list 快速转换为嵌套关系的list数据

JavaScript025

2021-02-20 js 把平级列表数据list 快速转换为嵌套关系的list数据,第1张

我在为公司的旧项目添加功能的时候遇到了这么一个问题,由于旧项目使用的是比较旧的 jquery框架,而我新加的功能模块使用的是vue + elementui,在使用element 的级联组件的时候发现旧有的接口返回的地址数据都是平铺的,这就跟element 的组建的默认的数据嵌套结构不一致了,因此前端这边就需要做一下数据结构的转换。

一开始我的想法是使用递归的方式一遍一遍的遍历数组然后重组成嵌套的对象,后来我发现这样的遍历3000多条数据效率太低了,很容易就卡死的页面。而经过了后端大佬的额指点后换了另一种方法,效率马上就翻了好几倍。

横剑击

剑侍招式,攻击距离75。

饮血剑舞

剑侍招式,攻击距离75。令目标进入追魂状态,每5秒减少生命值80点,持续25秒。

回风拂柳

剑侍招式,攻击距离75。

剑刃噬心

剑侍招式,攻击距离150,令目标进入缚足状态,移动力及跳跃力降低,持续12秒,同时进入颤栗状态,命中率降低10点,持续30秒。

分光斩影

剑侍招式,攻击距离75。令目标进入追魂状态,每5秒减少生命值150点,持续35秒。

慑魂一式

剑侍招式,攻击距离75。

傲断苍穹

剑侍招式,攻击距离75,招式使用时间间隔6秒。令目标进入颤栗状态,命中率降低18点,持续60秒。

出云幻星剑

剑侍招式,攻击距离75。

残影蚀心剑

剑侍招式,攻击距离75。令目标进入追魂状态,每5秒减少生命值300点,持续45秒。

剑气冲九霄

剑侍招式,攻击距离150。可同时对多个目标造成伤害。

轩辕斩龙诀

剑侍招式,攻击距离150。

凋零血雨剑

剑侍招式,攻击距离150,招式使用时间间隔3.1秒。令目标进入追魂状态,每5秒减少生命值360点,持续60秒。

剑荡八荒

剑侍招式,攻击距离75。

惊鸿幻剑

剑侍招式,攻击距离150,令目标进入缚足状态,移动力及跳跃力降低,持续15秒,同时进入羁绊状态,回避率降低30点,持续30秒。

狂雷七星剑

剑侍招式,攻击距离150,招式使用时间间隔8秒,令目标进入缚足状态,移动力及跳跃力降低,持续18秒,同时进入颤栗状态,命中率降低18点,持续45秒

字符串转日期、日期转字符串

// 2014-02-25

/**

* 字符串转时间(yyyy-MM-dd HH:mm:ss)

* result (分钟)

*/

stringToDate : function(fDate){

var fullDate = fDate.split("-")

return new Date(fullDate[0], fullDate[1]-1, fullDate[2], 0, 0, 0)

}

/**

* 格式化日期

* @param date 日期

* @param format 格式化样式,例如yyyy-MM-dd HH:mm:ss E

* @return 格式化后的金额

*/

formatDate : function (date, format) {

var v = ""

if (typeof date == "string" || typeof date != "object") {

return

}

var year = date.getFullYear()

var month = date.getMonth()+1

var day = date.getDate()

var hour = date.getHours()

var minute = date.getMinutes()

var second = date.getSeconds()

var weekDay = date.getDay()

var ms = date.getMilliseconds()

var weekDayString = ""

if (weekDay == 1) {

weekDayString = "星期一"

} else if (weekDay == 2) {

weekDayString = "星期二"

} else if (weekDay == 3) {

weekDayString = "星期三"

} else if (weekDay == 4) {

weekDayString = "星期四"

} else if (weekDay == 5) {

weekDayString = "星期五"

} else if (weekDay == 6) {

weekDayString = "星期六"

} else if (weekDay == 7) {

weekDayString = "星期日"

}

v = format

//Year

v = v.replace(/yyyy/g, year)

v = v.replace(/YYYY/g, year)

v = v.replace(/yy/g, (year+"").substring(2,4))

v = v.replace(/YY/g, (year+"").substring(2,4))

//Month

var monthStr = ("0"+month)

v = v.replace(/MM/g, monthStr.substring(monthStr.length-2))

//Day

var dayStr = ("0"+day)

v = v.replace(/dd/g, dayStr.substring(dayStr.length-2))

//hour

var hourStr = ("0"+hour)

v = v.replace(/HH/g, hourStr.substring(hourStr.length-2))

v = v.replace(/hh/g, hourStr.substring(hourStr.length-2))

//minute

var minuteStr = ("0"+minute)

v = v.replace(/mm/g, minuteStr.substring(minuteStr.length-2))

//Millisecond

v = v.replace(/sss/g, ms)

v = v.replace(/SSS/g, ms)

//second

var secondStr = ("0"+second)

v = v.replace(/ss/g, secondStr.substring(secondStr.length-2))

v = v.replace(/SS/g, secondStr.substring(secondStr.length-2))

//weekDay

v = v.replace(/E/g, weekDayString)

return v

}

// dateValue=2014-02-28

var cDate = _STAGE.stringToDate(dateValue)

cDate.setDate(cDate.getDate()+1)

currentDate = jAnXin.util.formatDate(cDate, "yyyy-MM-dd")

console.log(currentDate )// 2014-03-01

正则替换日期并格式化日期

转数字型:

ar ttDate = "2013年12月20日 14:20:20"

ttDate = ttDate.replace(/[^0-9]/mg, '').match(/.{8}/)

alert(ttDate)

结果:

20131220

转日期型:

var ttDate = "2013年12月20日 14:20:20"

ttDate = ttDate.match(/\d{4}.\d{1,2}.\d{1,2}/mg).toString()

ttDate = ttDate.replace(/[^0-9]/mg, '-')

alert(ttDate)

结果:2013-12-20

超级正则替换:

var ttDate = "2013年12月20日 14:20:20"

ttDate = ttDate.replace(/(\d{4}).(\d{1,2}).(\d{1,2}).+/mg, '$1-$2-$3')

alert(ttDate)

结果:

2013-12-20