天天看點

資料結構與算法JavaScript 讀書筆記

資料結構與算法JavaScript 讀書筆記

由于自己在對數組操作這塊比較薄弱,然後經高人指點,需要好好的攻讀一下這本書籍,原本想這個書名就比較高深,這下不好玩了。不過看着看着突然覺得講的東西都比較基礎。不過很多東西,平時還是沒有注意到,故寫出讀書筆記和諸君共勉!

第二張

2.2.1 建立一個數組

建立數組的方式有?那種比較高效?原因是?

第一種模式      
var nums = [];      
var numbers = [1,2,3,4,5];
console.log(numbers.length)//5      
第二種模式

var nums = new Array[];      
var numbers = new Array(10);      
console.log(numbers.length)//10      
從效率上說 第一種[]這個的效率更高

判斷一個對象是否是數組:可以調用Array.isArray();      
第三種模式
參見2.2.3      

2.2.2 讀寫數組

var numbers = [1,2,3,4,5];
var sum=0;
if (Array.isArray(numbers)) {
   // perform array tasks on numbers
    sum=numbers[0]+numbers[1]+numbers[2]+numbers[3]+numbers[4];
    console.log(sum);//15
}

當然更好的求和方案是用for循環,數組固有屬性      
numbers.length      

2.2.3 由字元串生成數組

var sentence = "the quick brown fox jumped over the lazy dog";
var words = sentence.split(" ");//根據空格分組
for (var i = 0; i < words.length; ++i) {
   print("word " + i + ": " + words[i]);
}
//結果參見下圖      
資料結構與算法JavaScript 讀書筆記

2.2.3 對數組的整體性操作

//淺複制:
var nums=[1,2,3];
var samenums=nums;
 
nums[0]=0;
console.log(samenums[0]); //0 這裡是0,而不是複制過來時候的1.

//深複制      
for(var i=0;i<nums.length;i++){
    samenums[i]=nums[i];
}
 
//這時候我們再:
nums[0]=0;
console.log(samenums[0])    //1,這裡依舊是1.      

以上代碼參見:​

 2.3.1 查找元素

  

indexOf();      
var names = ["David","Cynthia","Raymond","Clayton","Jennifer"];
//putstr("Enter a name to search for: ");
var name ="Clayton"; 
var position = names.indexOf(name);
if (position >= 0) {
   console.log("Found " + name + " at position " + position);
}
else {
   console.log(name + " not found in array.");
}
//Found Clayton at position 3      

 2016-04-25

 2.3.1 數組的字元串表示

有兩個方法可以将數組轉化為字元串: join() 和 toString() 。這兩個方法都傳回一個包含
數組所有元素的字元串,各元素之間用逗号分隔開。下面是一些例子:
var names = ["David", "Cynthia", "Raymond", "Clayton", "Mike", "Jennifer"];
var namestr = names.join();
print(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
namestr = names.toString();
print(namestr); // David,Cynthia,Raymond,Clayton,Mike,Jennifer
事實上,當直接對一個數組使用 print() 函數時,系統會自動調用那個數組的 toString()
方法:
print(names); // David,Cynthia,Raymond,Clayton,Mike,Jennifer      

2.3.3 由已有數組建立新數組

concat() 和 splice() 方法允許通過已有數組建立新數組。 concat 方法可以合并多個數組
建立一個新數組, splice() 方法截取一個數組的子集建立一個新數組。
我們先來看看 concat() 方法的工作原理。該方法的發起者是一個數組,參數是另一個數
組。作為參數的數組,其中的所有元素都被連接配接到調用 concat() 方法的數組後面。下面的
程式展示了 concat() 方法的工作原理:
var cisDept = ["Mike", "Clayton", "Terrill", "Danny", "Jennifer"];
var dmpDept = ["Raymond", "Cynthia", "Bryan"];
var itDiv = cis.concat(dmp);
print(itDiv);
itDiv = dmp.concat(cisDept);
print(itDiv);
輸出為:
Mike,Clayton,Terrill,Danny,Jennifer,Raymond,Cynthia,Bryan
Raymond,Cynthia,Bryan,Mike,Clayton,Terrill,Danny,Jennifer
第一行首先輸出 cis 數組裡的元素,第二行首先輸出 dmp 數組裡的元素。      

2.4 可變函數

2.4.1 為數組添加元素

/**
 * 請用浏覽器的控制台直接拷貝運作分段測試
 * @type {number[]}
 */
//Test1
var nums = [1,2,3,4,5];
console.log(nums); // 1,2,3,4,5
nums.push(6);
console.log(nums);

//Test2
//unshift() 方法可以将元素添加在數組的開頭,下述代碼展示了該方法的用法:
var nums = [2,3,4,5];
console.log(nums); // 2,3,4,5
var newnum = 1;
nums.unshift(newnum);
console.log(nums); // 1,2,3,4,5
nums = [3,4,5];
nums.unshift(newnum,1,2);
console.log(nums); // 1,2,3,4,5      

2.4.2 從數組中删除元素

使用 pop() 方法可以删除數組末尾的元素:
var nums = [1,2,3,4,5,9];
nums.pop();
print(nums); // 1,2,3,4,5
如果沒有可變函數,從數組中删除第一個元素需要将後續元素各自向前移動一個位置,和
在數組開頭添加一個元素一樣低效:
var nums = [9,1,2,3,4,5];
print(nums);
for (var i = 0; i < nums.length; ++i) {
nums[i] = nums[i+1];
}
print(nums); // 1,2,3,4,5,
除了要将後續元素前移一位,還多出了一個元素。當列印出數組中的元素時,會發現最後
多出一個逗号。
shift() 方法可以删除數組的第一個元素,下述代碼展示了該方法的用法:
var nums = [9,1,2,3,4,5];
nums.shift();
print(nums); // 1,2,3,4,5
這回數組末尾那個多餘的逗号消失了。 pop() 和 shift() 方法都将删掉的元素作為方法的
傳回值傳回,是以可以使用一個變量來儲存删除的元素:
var nums = [6,1,2,3,4,5];
var first = nums.shift(); // first gets the value 9
nums.push(first);
print(nums); // 1,2,3,4,5,6      

 2.4.4 為數組排序

剩下的兩個可變方法是為數組排序。第一個方法是 reverse() ,該方法将數組中元素的順
序進行翻轉。下面這個例子展示了該如何使用該方法:
var nums = [1,2,3,4,5];
nums.reverse();
print(nums); // 5,4,3,2,1
對數組進行排序是經常會遇到的需求,如果元素是字元串類型,那麼數組的可變方法
sort() 就非常好使:
var names = ["David","Mike","Cynthia","Clayton","Bryan","Raymond"];
names.sort();
print(names); // Bryan,Clayton,Cynthia,David,Mike,Raymond      
但是如果數組元素是數字類型, sort() 方法的排序結果就不能讓人滿意了:
var nums = [3,1,2,100,4,200];
nums.sort();
print(nums); // 1,100,2,200,3,4
sort() 方法是按照字典順序對元素進行排序的,是以它假定元素都是字元串類型,在上一
個例子中,即使元素是數字類型,也被認為是字元串類型。為了讓 sort() 方法也能排序數
字類型的元素,可以在調用方法時傳入一個大小比較函數,排序時, sort() 方法将會根據
該函數比較數組中兩個元素的大小,進而決定整個數組的順序。
對于數字類型,該函數可以是一個簡單的相減操作,從一個數字中減去另外一個數字。如
果結果為負,那麼被減數小于減數;如果結果為 0,那麼被減數與減數相等;如果結果為
正,那麼被減數大于減數。
将這些搞清楚之後,傳入一個大小比較函數,再來看看前面的例子:
function compare(num1, num2) {
return num1 - num2;
}
var nums = [3,1,2,100,4,200];
nums.sort(compare);
print(nums); // 1,2,3,4,100,200
sort() 函數使用了 compare() 函數對數組按照數字大小進行排序,而不是按照字典順序。      

<style><!--

body{background: #000000!important;color: #ffffff!important;}

div{background: #000000!important;}

p{background: #000000!important;color: #ffffff!important;;font-size: 15px!important;}

span{background: #000000!important;color: #ffffff!important;;font-size: 14px!important;}