数组算法
arrayObject.slice(start,end)
根据数组对象中某个值分组
此例中根据 arr
数组中的 menu_group
字段来分组
js
let map = {}
let result = []
arr.forEach(e => {
if (!map[e.menu_group]) {
result.push({
menu_group: e.menu_group,
menus: [e]
})
map[e.menu_group] = e
} else {
result.forEach(a => {
if (a.menu_group == e.menu_group) {
a.menus.push(e)
}
})
}
})
return result
递归全排列
- 如果
str
的长度为1,例如'a'
,则排序结果为['a']
- 递归的思路是这样的:比如给
'abc'
排序,我们可以不管后面的字符,将其设为preVal
,然后只考虑第一个字符'a'
怎么插入已经排好序的后面的字符中
TIP
preVal
代表的是后面字符的排序可能,比如给 'abc'
排序的话,preVal
就是 ['bc','cb]
- 例如将
'a'
插入到'bc'
中是要遍历三次的,所以遍历次数要加一 - 最后利用拼接的方法把
str[0]
也就是举例中的'a'
插入val
中
js
range(str){
if (str.length === 1) {
return [str] //tip1
} else {
let result = [];
let preVal = range(str.slice(1)); //tip2
preVal.forEach(val => {
for (let i = 0; i < val.length + 1; i++) { //tip3
let newStr = val.slice(0, i) + str[0] + val.slice(i); //tip4
result.push(newStr)
}
})
return result
}
}