前端数据结构与算法运用实例
原文链接 :为什么我认为数据结构与算法对前端开发很重要?
将如下扁平对象,转为树形对象。parent字段为空字符串的节点为根节点
var input = {
h3: {
parent: 'h2',
name: '副总经理(市场)'
},
h1: {
parent: 'h0',
name: '公司机构'
},
h7: {
parent: 'h6',
name: '副总经理(总务)'
},
h4: {
parent: 'h3',
name: '销售经理'
},
h2: {
parent: 'h1',
name: '总经理'
},
h8: {
parent: 'h0',
name: '财务总监'
},
h6: {
parent: 'h4',
name: '仓管总监'
},
h5: {
parent: 'h4',
name: '销售代表'
},
h0: {
parent: '',
name: 'root'
}
};
核心思路:利用了JavaScript里的引用类型构造树
var plain2Tree = function (obj) {
var key, res
for(key in obj) {
var parent = obj[key].parent
if(parent === '') {
res = obj[key]
} else {
obj[parent][key] = obj[key]
}
}
return res
}
将后端返回的关系型数据库中的数据处理为级联需要的结构化数据
后端返回的数据:
var data = [{
"province": "浙江",
"city": "杭州",
"name": "西湖"
}, {
"province": "四川",
"city": "成都",
"name": "锦里"
}, {
"province": "四川",
"city": "成都",
"name": "方所"
}, {
"province": "四川",
"city": "阿坝",
"name": "九寨沟"
}]
需要转化成的数据:
var data = [{
"value": "浙江",
"children": [{
"value": "杭州",
"children": [{
"value": "西湖"
}]
}]
}, {
"value": "四川",
"children": [{
"value": "成都",
"children": [{
"value": "锦里"
}, {
"value": "方所"
}]
}, {
"value": "阿坝",
"children": [{
"value": "九寨沟"
}]
}]
}]
核心思想是使用trie树,效果是解决方案和keys的长短无关
var transObject = function(tableData, keys) {
let hashTable = {}, res = []
for (let i = 0; i < tableData.length; i++) {
let arr = res, cur = hashTable
for (let j = 0; j < keys.length; j++) {
let key = keys[j], filed = tableData[i][key]
if (!cur[filed]) {
let pusher = {
value: filed
}, tmp
if (j !== (keys.length - 1)) {
tmp = []
pusher.children = tmp
}
cur[filed] = { $$pos: arr.push(pusher) - 1 }
cur = cur[filed]
arr = tmp
} else {
cur = cur[filed]
arr = arr[cur.$$pos].children
}
}
}
return res
}
验证:
var keys = ['province', 'city', 'name']
console.log(transObject(data, keys))
Node日志脱敏
node日志工具:log4js、bunyan、winston
脱敏:主要使用正则定义脱敏规则对隐私信息进行替换
大公司里怎样开发和部署前端代码
原文链接:大公司里怎样开发和部署前端代码
待总结......