斐波那契
const fib = function(n){
if(n<2){
return n
}else{
return fib(n-1)+fib(n-2)
}
}
const fib = function(n){
if(n<2){
return n
}
let q=0,p=0,r=1;
for(let i=2;i<=n;++i){
q=p;
p=r;
r=q+p;
}
return r
}
最长公共前缀
var longestCommonPrefix = function(strs) {
let res =strs[0];
for(let i=1;i<strs.length;i++){
let j=0;
for(;j<res.length && strs[i].length;j++){
if(res[j]!=strs[i][j]){
break;
}
}
res=res.substr(0,j)
if(res === '') return ''
}
return res;
};
两个数组的交集
var intersection = function (nums1, nums2) {
let res = [];
if (nums1.length < nums2.length) {
for (let i = 0; i < nums1.length; i++) {
if (nums2.indexOf(nums1[i]) != -1 && res.indexOf(nums1[i]) == -1) {
res.push(nums1[i]);
}
}
} else {
for (let i = 0; i < nums1.length; i++) {
if (nums1.indexOf(nums2[i]) != -1 && res.indexOf(nums2[i]) == -1) {
res.push(nums2[i]);
}
}
}
return res
};
中序遍历二叉树
var inorderTraversal = function(root) {
let res=[];
const inorder =(root)=>{
if (!root) {
return;
}
inorder(root.left);
res.push(root.val);
inorder(root.right)
}
inorder(root)
return res
};
最后出现的字符串
function lastUniqueChar( str ) {
if(!str) return ''
let res=[];
for(let i=0;i<str.length;i++){
if(str.indexOf(str[i])==str.lastIndexOf(str[i]) ){
res.push(str[i])
}
}
if(res.length === 0){
return ''
}else{
return res[res.length-1]
}
}
数组扁平化
const data = [{
currentName: "北京市",
children: [{
currentName: "北京市",
children: [{
currentName: "东城区",
children: [],
},
{
currentName: "西城区",
children: [],
},
],
}, ],
},
{
currentName: "天津市",
children: [{
currentName: "天津市",
children: [{
currentName: "和平区",
children: [],
},
{
currentName: "河东区",
children: [],
},
],
}, ],
},
];
function flatTree(data){
let res =[]
const fn=(item,str='')=>{
const{
currentName,
children
}=item
let temp = `${str}${currentName}`
if(children && children.length>0){
children.forEach((child)=>fn(child,temp))
}else{
res.push(temp)
}
}
data.forEach((item)=>fn(item))
return res
}
扁平化数组转Tree
var menu_list = [{
id: '1',
menu_name: '设置',
menu_url: 'setting',
parent_id: 0
}, {
id: '1-1',
menu_name: '权限设置',
menu_url: 'setting.permission',
parent_id: '1'
}, {
id: '1-1-1',
menu_name: '用户管理列表',
menu_url: 'setting.permission.user_list',
parent_id: '1-1'
}, {
id: '1-1-2',
menu_name: '用户管理新增',
menu_url: 'setting.permission.user_add',
parent_id: '1-1'
}, {
id: '1-1-3',
menu_name: '角色管理列表',
menu_url: 'setting.permission.role_list',
parent_id: '1-1'
}, {
id: '1-2',
menu_name: '菜单设置',
menu_url: 'setting.menu',
parent_id: '1'
}, {
id: '1-2-1',
menu_name: '菜单列表',
menu_url: 'setting.menu.menu_list',
parent_id: '1-2'
}, {
id: '1-2-2',
menu_name: '菜单添加',
menu_url: 'setting.menu.menu_add',
parent_id: '1-2'
}, {
id: '2',
menu_name: '订单',
menu_url: 'order',
parent_id: 0
}, {
id: '2-1',
menu_name: '报单审核',
menu_url: 'order.orderreview',
parent_id: '2'
}, {
id: '2-2',
menu_name: '退款管理',
menu_url: 'order.refundmanagement',
parent_id: '2'
}]
function buildTree(arr) {
let temp=[];
let res=[];
for(let i in arr){
temp[arr[i].id]=arr[i]
}
for(let i in temp){
if(temp[i].parent_id){
if(!temp[temp[i].parent_id].children){
temp[temp[i].parent_id].children = new Object;
}
temp[temp[i].parent_id].children[temp[i].id] = temp[i]
}else{
res.push(temp[i])
}
}
return res
}
拍平多维数组
let arr=[1,[2,[3,[4,[5]]]]];
function flatArr(arr){
let res=[];
arr.forEach((item)=>{
if(Array.isArray(item)){
return res=res.concat(flatArr(item))
}else{
res.push(item)
}
})
return res
}
function flatArr(arr){
while(arr.some(item=>Array.isArray(item))){
arr=[].concat(...arr)
}
return arr
}
function flatArr(arr){
return arr.flat(Infinity)
}
自定义字符串排序
var customSortString = function(order, s) {
s=s.split('')
var tmp=s
for(let i in order){
for(let j in s){
if(s[j]==order[i]){
s[j]=parseInt(i)
}
}
}
tmp=s.filter((value,index,array)=>{return ((typeof value )=='number')}).sort((a,b)=>a-b)
s=s.filter((value,index,array)=>{return ((typeof value )!='number')})
s=tmp.concat(s)
for(let i in order){
for(let j in s){
if(s[j]==i){
s[j]=order[i]
}
}
}
s=s.join('')
return s
};