全部JavaScript對象都有hasOwnProperty(value)的方法,用來返回一個代表對象是否是具備這個value Key值屬性的布爾值。java
javaScript的方法 具備delete的方法 事實上在業務中不多去刪除真實的數據,可是在作一下添加和刪除時 爲了配合後端 也是會用到的。node
在javaScript中咱們一般使用數據結構是對象和數組, 更經常使用的是鏈表結構,添加和刪除方便,不須要去遍歷。這是一個很節省性能的事情。算法
new.target 是一個新增的管理 實例函數的方法 若是這個函數被new 或者繼承調用 那麼就會被返回當前的class或者function 不然返回一個undefined 須要些在constructor裏。後端
set類 在JavaScript中體現爲集合的形式 相似對象不一樣於對象只能一組一組的保存,是能夠多組進行保存的類比其餘的語言set類 它算是比較完善的了,set類的結構 相似{1:1,2:2} 以key:value的形式保存起來。 咱們能夠使用它用來求交集,並集,差集,子集等等 相似於對象因此咱們能夠使用delete 來它其中的某一項,獲取它的長度能夠經過 用Object.keys來枚舉它拿到這個數組的length。添加能夠使用其本身本省所帶的add的方法。檢測是否有這個屬性key 咱們能夠使用hasOwnProperty()的方法來確認這個屬性。 這裏的集合存儲的是一組互不相同的元素.(也就是說這裏不適用多重集)。數組
散列表和字典結構 在JavaScript中體現爲Map類。顧名思義 主要是爲了作映射使用。用來存儲惟一的值,結構也是使用key: value的形式。數據結構
非順序數據結構有散列法和樹。函數
一個樹的結構包含一系列的父子關係的節點。每一個節點都有一個父節點(除了頂部的第一個節點)以及零個或多個子節點。性能
(這裏圖的第二層8是錯誤的 應該是5)this
位於樹頂部的節點叫作根節點。它沒有父節點。樹種的每一個元素都叫作節點。節點分爲內部節點和外部節點。 至少有一個字節點的節點稱爲內部節點(7,5,9,15,13,20是內部節點).沒有子元素的節點稱爲外部節點或葉節點(3,6,8,10,12,14,18,25都是葉節點)。spa
一個節點能夠有祖先和後代。一個節點(除了根節點)的祖先包括父節點,祖父節點,曾祖父節點等等一個節點的後代包括它下面的全部節點。如圖上節點9的祖先節點有7和11,而他的字節點有8和10.
有關於樹的另外一個術語是子樹。子樹由節點和它的後代構成。好比節點13和12,14構成了圖中的子樹。
節點的一個屬性是深度,節點的深度取決於它的祖先節點的數量。好比,節點10有3個祖先節點(9,7,11),那麼它的深度就是3.
樹的高度取決於全部節點深度的最大值。一棵樹也能夠被分解成層級。根節點在第0層,它的字節點在第一層。
二叉樹和二叉搜索樹
二叉樹的節點最多隻能有兩個子節點:一個是左側子節點,另外一個是右側的子節點。這些定義有助於咱們寫出更高效的向/從樹中插入,查找和刪除節點的算法。
上圖就是一個二叉搜索樹(BST)。屬於二叉樹的一種。
如何用代碼去申明一個二叉搜索樹。
首先定義一個function BinarySearchTree類。
首先: 咱們先明確二叉搜索樹.
class BinarySearchTree { consturtor() { this.Node = class {
consturtor(key){
this.key = key; //這是咱們的節點值 變量私有化
this.left = null ; // 根節點起始左位置的初始化
this.right = null; // 根節點起始右位置的初始化
}
}
this.root = null ; //起始的根節點
}
}
和鏈表同樣,都是經過指針來表示節點之間的關係(術語稱爲邊)。在雙向鏈表中,每一個節點都包含兩個指針,一個指向下一個節點,一個指向上一個節點。對於樹,使用一樣的方式(也使用兩個指針)
class BinarySearchTree { constructor() { this.Node = class { constructor(key){ this.key = key; //這是咱們的節點值 變量私有化 this.left = null ; // 根節點起始左位置的初始化 this.right = null; // 根節點起始右位置的初始化 } } this.root = null ; //起始的根節點 } insert(key) { const newNode = new this.Node(key); if (this.root === null) { this.root = newNode; } else { this.insertNode(this.root, newNode); } } insertNode(node, newNode) { // 尾遞歸查詢節點 if (newNode.key < node.key) { //若是新的節點值小於父節點的值 if (node.left === null) { node.left = newNode; } else { this.insertNode(node.left, newNode); } } else { if (node.right === null) { node.right = newNode; } else { this.insertNode(node.right, newNode); } } } } const BinarySearchTree1 = new BinarySearchTree(); BinarySearchTree1.insert(11); BinarySearchTree1.insert(7); BinarySearchTree1.insert(15); BinarySearchTree1.insert(5); BinarySearchTree1.insert(3); BinarySearchTree1.insert(9); BinarySearchTree1.insert(8); BinarySearchTree1.insert(10); BinarySearchTree1.insert(13); BinarySearchTree1.insert(12); BinarySearchTree1.insert(14); BinarySearchTree1.insert(20); BinarySearchTree1.insert(18); BinarySearchTree1.insert(25); console.log(BinarySearchTree1);
這樣咱們就實現了 插入的方法。
這就是咱們獲得的二叉樹。
樹的遍歷分爲三種 中序遍歷 先序遍歷 後序遍歷
中序遍歷是一種以上行順序的訪問的BST全部節點的遍歷方式,也就是以從最小到最大的順序訪問全部節點。中序遍歷的一種應用就是對樹進行排序操做。
class BinarySearchTree { constructor() { this.Node = class { constructor(key){ this.key = key; //這是咱們的節點值 變量私有化 this.left = null ; // 節點起始左位置的初始化 this.right = null; // 節點起始右位置的初始化 } } this.root = null ; //起始的根節點 } insert(key) { const newNode = new this.Node(key); if (this.root === null) { this.root = newNode; } else { this.insertNode(this.root, newNode); } } insertNode(node, newNode) { if (newNode.key < node.key) { //若是新的節點值小於父節點的值 if (node.left === null) { node.left = newNode; } else { this.insertNode(node.left, newNode); } } else { if (node.right === null) { node.right = newNode; } else { this.insertNode(node.right, newNode); } } } inOrderTraverseNode(node, callback) { if (node !== null) { //{2} this.inOrderTraverseNode(node.left, callback); //{3} callback(node.key); //{4} this.inOrderTraverseNode(node.right, callback); //{5} } } inOrderTraverse(callback) { this.inOrderTraverseNode(this.root, callback); } printNode(value) { console.log(value); } } const BinarySearchTree1 = new BinarySearchTree(); BinarySearchTree1.insert(11); BinarySearchTree1.insert(7); BinarySearchTree1.insert(15); BinarySearchTree1.insert(5); BinarySearchTree1.insert(3); BinarySearchTree1.insert(9); BinarySearchTree1.insert(8); BinarySearchTree1.insert(10); BinarySearchTree1.insert(13); BinarySearchTree1.insert(12); BinarySearchTree1.insert(14); BinarySearchTree1.insert(20); BinarySearchTree1.insert(18); BinarySearchTree1.insert(25); BinarySearchTree1.inOrderTraverse(BinarySearchTree1.printNode); console.log(BinarySearchTree1);
搜索樹中的值
在樹中, 有三種常常執行的搜索類型:
最小值;
最大值;
搜索特定的值。
搜索最小值和最大值