事实上,只要追逐名利的世界一天不被毁灭,只要幸福一天不变的像空气那样唾手可得,人类就一天不能停止贪心!
数据结构
数据结构是数据元素的集合。目前有三种结构,分别是逻辑结构和物理结构。逻辑结构用来描述逻辑关系,比如数据元素一对多,多对一等;物理结构一般是指数据在计算机存储空间的存放形式,比如顺序存储结构和链式存储结构。数据的分类一般分为线性与非线性,线性相当于一对一,比如栈和队列。非线性相当于一对多或多对一,比如树结构。
针对前端而言常用的数据结构有:栈、队列、链表、树、散列表。
js的数据类型有:Number、String、Boolean、Function、Object、null、undefined。
栈和队列可以用数组来模拟,栈的特性是先进后出,队列的特性是先进先出。
//栈
let stack = [1,2,3,4];
//进栈
//stack.push(5)
stack.length = stack.length-1;
//队列
let queue = [1,2,3,4];
//进队列
queue[queue.length] = 5;
//出队列
//queue.unshift(1);
let i = 0;
while(i < queue.length - 1){
queue[i] = queue[i + 1];
i++;
}
queue.length = queue.length - 1;
在算法中对栈的运用一般都是取出栈顶元素比较,比如有效的括号:
var isValid = function(s){
let map = {
'{':'}',
'(':')',
'[':']'
}
let stack = [];
for(let i=0; i < s.length; i++){
if(map[s[i]]){
stack.push(s[i]);
}else if(s[i] !== map[stack.pop()]){
return false;
}
}
return stack.length === 0;
}
链表这种数据结构,查找指定元素比较费时,插入操作比较方便
function ListBode(val){
this.val = val;//数据域
this.next = null;//指针域
}
树是比较常考的,比如二叉树等
function TreeNode(val){
this.val = val;//根节点
this.left = null;//左子树
this.right = null;//右子树
}
二叉树的中序遍历
var inorderTraversal = function(root){
return root ?
[
...inorderTraversal(root.left),
root.val,
...inorderTraversal(root.right);
]
: []
};
散列表是我们最常用的数据结构,因为查找和插入操作都不费时,就好比JS中的对象,关于最常见的数据结构可以看这里
在JS判断数据类型的方法有很多种,一般最常用的就是Object.prototypc.toString.call()
对于简单的数据类型,可以通过typeof来判断。除null外,均可以返回正确的结果
let fn = function(){};
typeof fn === "function"//ture
typeof null === "object"//true
instanceof是用来判断A是否为B的实例,instanceof检测的是原型
function myInstanceof(A,B){
const L = A.__proto__;
const R = B.prototype;
if(L === R) return true;
return false;
}
判断两个对象是否相等,可以使用JSON.stringify()来判断,同样也可以判断两个数组是否相等,判断数组还可以用toString()
let a = [1,2,3,"d"]
let b = [1,2,3,"d"]
a.toString() === b.toString()//true
JSON.stringify(a) === JSON.toString(b)//true