成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js的數(shù)據(jù)結(jié)構(gòu)與算法--數(shù)組

yeyan1996 / 1061人閱讀

1.創(chuàng)建數(shù)組
var numbers = [];
var numbers = new Array();
//在調(diào)用 Array 的構(gòu)造函數(shù)時(shí),可以只傳入一個(gè)參數(shù),用來(lái)指定數(shù)組的長(zhǎng)度
var numbers = new Array(10)
console.log(numbers.length)// 顯示 10
可以調(diào)用 Array.isArray() 來(lái)判斷一個(gè)對(duì)象是否是數(shù)組
2.由字符串生成數(shù)組

1字符串對(duì)象的 split() 方法也可以生成數(shù)組

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]);
}
//該程序的輸出為:
word 0: the
word 1: quick
word 2: brown
word 3: fox
word 4: jumped
word 5: over
word 6: the
word 7: lazy
word 8: dog

(1)淺復(fù)制,新數(shù)組依然指向原來(lái)的數(shù)組(當(dāng)把一個(gè)數(shù)組賦給另外一個(gè)數(shù)組時(shí),只是為被賦值的數(shù)組增加了一個(gè)新的引用。當(dāng)你通過(guò)原引用修改了數(shù)組的值,另外一個(gè)引用也會(huì)感知到這個(gè)變化)

var nums = [];
for (var i = 0; i < 100; i++) {
    nums[i] = i+1;
}
var samenums = nums;
nums[0] = 400;
print(samenums[0]); // 顯示 400

(2)深復(fù)制,將原數(shù)組中的每一個(gè)元素都復(fù)制一份到新數(shù)組中。

function copy(arr1, arr2) {
    for (var i = 0; i < arr1.length; i++) {
        arr2[i] = arr1[i];
    }
}
var nums = [];
for (var i = 0; i < 100; i++) {
    nums[i] = i+1;
}
var samenums = [];
copy(nums, samenums);
nums[0] = 400;
print(samenums[0]); // 顯示 1
3.存取函數(shù)
JavaScript 提供了一組用來(lái)訪問(wèn)數(shù)組元素的函數(shù),叫做存取函數(shù),這些函數(shù)返回目標(biāo)數(shù)組
的某種變體

查找元素

(1)indexOf(),用來(lái)查找傳進(jìn)來(lái)的參數(shù)在目標(biāo)數(shù)組中是否存在,如果目標(biāo)數(shù)組包含該參數(shù),就返回該元素在數(shù)組中的索引;如果不包含,就返回 -1。如果數(shù)組中包含多個(gè)相同的元素,indexOf() 函數(shù)總是返回第一個(gè)與參數(shù)相同的元素的索引。
(2)lastIndexOf(),該函數(shù)返回相同元素中最后一個(gè)元素的索引,如果沒(méi)找到相同元素,則返回 -1

數(shù)組的字符串表示
將數(shù)組轉(zhuǎn)化為字符串:join() 和 toString(),這兩個(gè)方法都返回一個(gè)包含數(shù)組所有元素的字符串,各元素之間用逗號(hào)分隔開(kāi)

由已有數(shù)組創(chuàng)建新數(shù)組
concat() 和 splice() 方法允許通過(guò)已有數(shù)組創(chuàng)建新數(shù)組。concat 方法可以合并多個(gè)數(shù)組
創(chuàng)建一個(gè)新數(shù)組,splice() 方法截取一個(gè)數(shù)組的子集創(chuàng)建一個(gè)新數(shù)組。

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
4.為數(shù)組添加元素

push() 方法會(huì)將一個(gè)元素添加到數(shù)組末尾
unshift() 方法可以將元素添加在數(shù)組的開(kāi)頭

5.從數(shù)組中刪除元素

使用 pop() 方法可以刪除數(shù)組末尾的元素
shift() 方法可以刪除數(shù)組的第一個(gè)元素
使用 splice() 方法為數(shù)組添加元素,需提供如下參數(shù):
? 起始索引(也就是你希望開(kāi)始添加元素的地方);
? 需要?jiǎng)h除的元素個(gè)數(shù)(添加元素時(shí)該參數(shù)設(shè)為 0);
? 想要添加進(jìn)數(shù)組的元素。

6.為數(shù)組排序

reverse(),該方法將數(shù)組中元素的順序進(jìn)行翻轉(zhuǎn)
sort() 方法是按照字典順序?qū)υ剡M(jìn)行排序的,因此它假定元素都是字符串類型

var names = ["David","Mike","Cynthia","Clayton","Bryan","Raymond"];
names.sort();// Bryan,Clayton,Cynthia,David,Mike,Raymond
names.sort().reverse()//Raymond,Mike,David,Cynthia,Bryan

對(duì)于數(shù)字類型,該函數(shù)可以是一個(gè)簡(jiǎn)單的相減操作,從一個(gè)數(shù)字中減去另外一個(gè)數(shù)字。如
果結(jié)果為負(fù),那么被減數(shù)小于減數(shù);如果結(jié)果為 0,那么被減數(shù)與減數(shù)相等;如果結(jié)果為
正,那么被減數(shù)大于減數(shù)。
將這些搞清楚之后,傳入一個(gè)大小比較函數(shù),再來(lái)看看前面的例子:
function compare(num1, num2) {
return num1 - num2;
}
var nums = [3,1,2,100,4,200];
nums.sort(compare);
console.log(nums); // 1,2,3,4,100,200
sort() 函數(shù)使用了 compare() 函數(shù)對(duì)數(shù)組按照數(shù)字大小進(jìn)行排序,而不是按照字典順序。

7.迭代器方法

不生成新數(shù)組的迭代器方法
是 forEach(),該方法接受一個(gè)函數(shù)作為參數(shù),對(duì)數(shù)組中的每個(gè)元素使用該函數(shù)。

 function square(num) {
    console.log(num, num * num);
   }
  var nums = [1,2,3,4,5,6,7,8,9,10];
  nums.forEach(square);
  //該程序的輸出為:
    1 1
    2 4
    3 9
    4 16
    5 25
    6 36
    7 49
    8 64
    9 81
    10 100
every(),該方法接受一個(gè)返回值為布爾類型的函數(shù),對(duì)數(shù)組中的每個(gè)元素使用該函數(shù)。如果對(duì)于所有的元素,該函數(shù)均返回 true,則該方法返回 true。

請(qǐng)輸入代碼
 function isEven(num) {
    return num % 2 == 0;
    }
    var nums = [2,4,6,8,10];
    var even = nums.every(isEven);
    if (even) {
        console.log("all numbers are even");
    }
    else {
         console.log("not all numbers are even");
    }
    //輸出為:
    all numbers are even
some() 方法也接受一個(gè)返回值為布爾類型的函數(shù),只要有一個(gè)元素使得該函數(shù)返回 true,
該方法就返回 true。
function isEven(num) {
return num % 2 == 0;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var someEven = nums.some(isEven);
if (someEven) {
print("some numbers are even");
}
else {
print("no numbers are even");
}
nums = [1,3,5,7,9];
someEven = nums.some(isEven);
if (someEven) {
print("some numbers are even");
}
else {
print("no numbers are even");
}
//該程序的輸出為:
some numbers are even
no numbers are even

reduce() 方法接受一個(gè)函數(shù),返回一個(gè)值。該方法會(huì)從一個(gè)累加值開(kāi)始,不斷對(duì)累加值和數(shù)組中的后續(xù)元素調(diào)用該函數(shù),直到數(shù)組中的最后一個(gè)元素,最后返回得到的累加值。

 function add(runningTotal, currentValue) {
    return runningTotal + currentValue;
}
var nums = [1,2,3,4,5,6,7,8,9,10];
var sum = nums.reduce(add);
console.log(sum); // 顯示 55

生成新數(shù)組的迭代器方法
map() 和 filter()
map() 返回一個(gè)新的數(shù)組,該數(shù)組的元素是對(duì)原有元素應(yīng)用某個(gè)函數(shù)得到的結(jié)果

function curve(grade) {
return grade += 5;
}
var grades = [77, 65, 81, 92, 83];
var newgrades = grades.map(curve);
consoe.log(newgrades); // 82, 70, 86, 97, 88

對(duì)一個(gè)字符串?dāng)?shù)組使用 map() 方法的例子:

function first(word) {
    return word[0];
}
var words = ["for","your","information"];
var acronym = words.map(first);
print(acronym.join("")); // 顯示 "fyi"

filter(),傳入一個(gè)返回值為布爾類型的函數(shù),當(dāng)對(duì)數(shù)組中的所有元素應(yīng)用該函數(shù),結(jié)果均為 true 時(shí),該方法并不返回 true,而是返回一個(gè)新數(shù)組,該數(shù)組包含應(yīng)用該函數(shù)后結(jié)果為 true 的元素。

function isEven(num) {
    return num % 2 == 0;
}
function isOdd(num) {
    return num % 2 != 0;
}
var nums = [];
for (var i = 0; i < 20; ++i) {
    nums[i] = i+1;
}
var evens = nums.filter(isEven);
console.log("Even numbers: ");
console.log(evens);
var odds = nums.filter(isOdd);
console.log("Odd numbers: ");
console.log(odds);
//該程序的執(zhí)行結(jié)果如下:
Even numbers:
2,4,6,8,10,12,14,16,18,20
Odd numbers:
1,3,5,7,9,11,13,15,17,19

還可以使用 filter() 方法過(guò)濾字符串?dāng)?shù)組,下面這個(gè)例子過(guò)濾掉了那些不包含
“cie”的單詞

function afterc(str) {
if (str.indexOf("cie") > -1) {
return true;
}
return false;
}
var words = ["recieve","deceive","percieve","deceit","concieve"];
var misspelled = words.filter(afterc);
console.log(misspelled); // 顯示 recieve,percieve,concieve
二維和多維數(shù)組 1.創(chuàng)建二維數(shù)組
Array.matrix = function(numrows, numcols, initial) {
var arr = [];
for (var i = 0; i < numrows; ++i) {
var columns = [];
for (var j = 0; j < numcols; ++j) {
columns[j] = initial;
}
arr[i] = columns;
}
return arr;
}
2.處理二維數(shù)組的元素

處理二維數(shù)組中的元素,有兩種最基本的方式:按列訪問(wèn)和按行訪問(wèn)

//得到該學(xué)生的平均成績(jī)
var grades = [[89, 77, 78],[76, 82, 81],[91, 94, 89]];
var total = 0;
var average = 0.0;
for (var row = 0; row < grades.length; ++row) {
    for (var col = 0; col < grades[row].length; ++col) {
        total += grades[row][col];
    }
    average = total / grades[row].length;
    console.log("Student " + parseInt(row+1) + " average: " + average.toFixed(2));
    total = 0;
    average = 0.0;
}
//以下為程序的輸出:
Student 1 average: 81.33
Student 2 average: 79.67
Student 3 average: 91.33
//一個(gè)學(xué)生各科的平均成績(jī)
var grades = [[89, 77, 78],[76, 82, 81],[91, 94, 89]];
var total = 0;
var average = 0.0;
for (var col = 0; col < grades.length; ++col) {
for (var row = 0; row < grades[col].length; ++row) {
total += grades[row][col];
}
average = total / grades[col].length;
print("Test " + parseInt(col+1) + " average: " +average.toFixed(2));
total = 0;
average = 0.0;
}
//該程序的輸出為:
Test 1 average: 85.33
Test 2 average: 84.33
Test 3 average: 82.67
3.參差不齊的數(shù)組
//為了給個(gè)示例,假設(shè)數(shù)組 grades 中,每個(gè)學(xué)生成績(jī)記錄的個(gè)數(shù)是不一樣的,不用修改代碼,依然可以正確計(jì)算出正確的平均分:
var grades = [[89, 77],[76, 82, 81],[91, 94, 89, 99]];
var total = 0;
var average = 0.0;
for (var row = 0; row < grades.length; ++row) {
for (var col = 0; col < grades[row].length; ++col) {
total += grades[row][col];
}
average = total / grades[row].length;
print("Student " + parseInt(row+1) + " average: " + average.toFixed(2));
total = 0;
average = 0.0;
}
//注意第一名同學(xué)只有兩門課的成績(jī),而第二名同學(xué)有三門課的成績(jī),第三名同學(xué)有四門課的成績(jī)。因?yàn)槌绦蛟趦?nèi)層的 for 循環(huán)中計(jì)算了每個(gè)數(shù)組的長(zhǎng)度,即使數(shù)組中每一行的長(zhǎng)度不一,程序依然不會(huì)出什么問(wèn)題。該段程序的輸出為:
Student 1 average: 83.00
Student 2 average: 79.67
Student 3 average: 93.25
對(duì)象數(shù)組
function Point(x,y) {
this.x = x;
this.y = y;
}
function displayPts(arr) {
for (var i = 0; i < arr.length; ++i) {
print(arr[i].x + ", " + arr[i].y);
}
}
var p1 = new Point(1,2);
var p2 = new Point(3,5);
var p3 = new Point(2,8);
var p4 = new Point(4,4);
var points = [p1,p2,p3,p4];
for (var i = 0; i < points.length; ++i) {
print("Point " + parseInt(i+1) + ": " + points[i].x + ", " + points[i].y);
}
var p5 = new Point(12,-3);
points.push(p5);
print("After push: ");
displayPts(points);
points.shift();
print("After shift: ");
displayPts(points)
對(duì)象中的數(shù)組
function weekTemps() {
this.dataStore = [];
this.add = add;
this.average = average;
}
function add(temp) {
this.dataStore.push(temp);
}
function average() {
var total = 0;
for (var i = 0; i < this.dataStore.length; ++i) {
total += this.dataStore[i];
}
return total / this.dataStore.length;
}
var thisWeek = new weekTemps();
thisWeek.add(52);
thisWeek.add(55);
thisWeek.add(61);
thisWeek.add(65);
thisWeek.add(55);
thisWeek.add(50);
thisWeek.add(52);
thisWeek.add(49);
print(thisWeek.average()); // 顯示 54.875

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93757.html

相關(guān)文章

  • JS數(shù)據(jù)結(jié)構(gòu)算法_排序和搜索算法

    摘要:上一篇數(shù)據(jù)結(jié)構(gòu)與算法樹(shù)寫在前面這是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的最后一篇博客,也是在面試中常常會(huì)被問(wèn)到的一部分內(nèi)容排序和搜索。 上一篇:JS數(shù)據(jù)結(jié)構(gòu)與算法_樹(shù) 寫在前面 這是《學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法》的最后一篇博客,也是在面試中常常會(huì)被問(wèn)到的一部分內(nèi)容:排序和搜索。在這篇博客之前,我每每看到排序頭就是大的,心里想著類似冒泡排序,兩層遍歷啪啪啪就完事了,然后再也無(wú)心去深入研究排序相...

    姘擱『 評(píng)論0 收藏0
  • 嘮叨一下js對(duì)象哈希表那些事

    摘要:的擴(kuò)展知識(shí)對(duì)于哈希表來(lái)說(shuō),最重要的莫過(guò)于生成哈希串的哈希算法和處理沖突的策略了。由于鏈表的查找需要遍歷,如果我們將鏈表?yè)Q成樹(shù)或者哈希表結(jié)構(gòu),那么就能大幅提高沖突元素的查找效率。 最近在整理數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的知識(shí),小茄專門在github上開(kāi)了個(gè)repo https://github.com/qieguo2016...,后續(xù)內(nèi)容也會(huì)更新到這里,歡迎圍觀加星星! js對(duì)象 js中的對(duì)象是基...

    Nosee 評(píng)論0 收藏0
  • Deep in JS - 收藏集 - 掘金

    摘要:今天同學(xué)去面試,做了兩道面試題全部做錯(cuò)了,發(fā)過(guò)來(lái)給道典型的面試題前端掘金在界中,開(kāi)發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha) - 前端 - 掘金來(lái)自《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡(jiǎn)介 算法實(shí)現(xiàn) 選擇排序 簡(jiǎn)介 算法實(shí)現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...

    enali 評(píng)論0 收藏0
  • 算法》第一章學(xué)習(xí)筆記js實(shí)現(xiàn)

    摘要:算法第一章學(xué)習(xí)筆記實(shí)現(xiàn)更多內(nèi)容目標(biāo)總結(jié)本書主要內(nèi)容,相應(yīng)算法使用來(lái)模仿實(shí)現(xiàn)在計(jì)算機(jī)科學(xué)領(lǐng)域,我們用算法這個(gè)詞來(lái)描述一種有限確定有效的并適合用計(jì)算機(jī)程序來(lái)實(shí)現(xiàn)的解決問(wèn)題的方法。 《算法》第一章學(xué)習(xí)筆記js實(shí)現(xiàn) 更多內(nèi)容 目標(biāo):總結(jié)本書主要內(nèi)容,相應(yīng)算法使用js來(lái)模仿實(shí)現(xiàn) 在計(jì)算機(jī)科學(xué)領(lǐng)域,我們用算法這個(gè)詞來(lái)描述一種有限、確定、有效的并適合用計(jì)算機(jī)程序來(lái)實(shí)現(xiàn)的解決問(wèn)題的方法。我們關(guān)注的大多...

    baishancloud 評(píng)論0 收藏0
  • 算法》第一章學(xué)習(xí)筆記js實(shí)現(xiàn)

    摘要:算法第一章學(xué)習(xí)筆記實(shí)現(xiàn)更多內(nèi)容目標(biāo)總結(jié)本書主要內(nèi)容,相應(yīng)算法使用來(lái)模仿實(shí)現(xiàn)在計(jì)算機(jī)科學(xué)領(lǐng)域,我們用算法這個(gè)詞來(lái)描述一種有限確定有效的并適合用計(jì)算機(jī)程序來(lái)實(shí)現(xiàn)的解決問(wèn)題的方法。 《算法》第一章學(xué)習(xí)筆記js實(shí)現(xiàn) 更多內(nèi)容 目標(biāo):總結(jié)本書主要內(nèi)容,相應(yīng)算法使用js來(lái)模仿實(shí)現(xiàn) 在計(jì)算機(jī)科學(xué)領(lǐng)域,我們用算法這個(gè)詞來(lái)描述一種有限、確定、有效的并適合用計(jì)算機(jī)程序來(lái)實(shí)現(xiàn)的解決問(wèn)題的方法。我們關(guān)注的大多...

    K_B_Z 評(píng)論0 收藏0
  • 算法》第一章學(xué)習(xí)筆記js實(shí)現(xiàn)

    摘要:算法第一章學(xué)習(xí)筆記實(shí)現(xiàn)更多內(nèi)容目標(biāo)總結(jié)本書主要內(nèi)容,相應(yīng)算法使用來(lái)模仿實(shí)現(xiàn)在計(jì)算機(jī)科學(xué)領(lǐng)域,我們用算法這個(gè)詞來(lái)描述一種有限確定有效的并適合用計(jì)算機(jī)程序來(lái)實(shí)現(xiàn)的解決問(wèn)題的方法。 《算法》第一章學(xué)習(xí)筆記js實(shí)現(xiàn) 更多內(nèi)容 目標(biāo):總結(jié)本書主要內(nèi)容,相應(yīng)算法使用js來(lái)模仿實(shí)現(xiàn) 在計(jì)算機(jī)科學(xué)領(lǐng)域,我們用算法這個(gè)詞來(lái)描述一種有限、確定、有效的并適合用計(jì)算機(jī)程序來(lái)實(shí)現(xiàn)的解決問(wèn)題的方法。我們關(guān)注的大多...

    qingshanli1988 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<