4 陣列 案例實戰

2021-10-24 14:38:15 字數 3876 閱讀 9765

擴充套件陣列一般通過為array 物件定義原型方法來實現,這些原型方法能被所有陣列繼承

array.prototype.

hello

=function()

var a=[1

,2,3

]var b=

a.hello()

b.hello()

//結果:

//hello!

//hello!

【例】為陣列擴充套件乙個求所有元素之和的方法

array.prototype._sum=array.prototype.sum||

//檢測是否存在同名方法

(array.prototype.

_sum

=function()

return _n;

//返回累加的和})

;object.prototype.sum=array.prototype._sum;

//將陣列臨時原型方法賦值給物件的原型方法

var a=[1

,2,3

,4,5

,6,7

,8,'9'

]console.

log(a.

sum())

//結果:

//45

上述**陣列第九個元素是乙個字串型別的數字,彙總時也被轉換為數值進行累加。

var a=[2

,3,43

,43,554,3

,32,4

,43,2

]console.

log(

[...

newset

(a)]

)//結果:

// [ 2, 3, 43, 554, 32, 4 ]

1.從第乙個元素開始,該元素預設為已經被排序

2.取出下乙個元素,在已排序的序列中從後向前掃瞄

3.若已排序的元素大於新元素(temp),將該元素移到下一位置

4.重複步驟3,直到找到已排序的元素小於或等於新元素

5.將新元素插入到該位置後

6.重複步驟2~5

function

insertsort

(arr)

arr[j+1]

=temp;

}return arr;

}var a=[1

,5,3

,5,2

,9,7

];console.

log(

insertsort

(a))

//[ 1, 2, 3, 5, 5, 7, 9]

二分插入(binary-insert-sort)排序是一種在直接插入排序演算法上進行改動的排序演算法。使用二分查詢的方式,在速度上有一定提公升。

1.從第乙個元素開始,該元素預設為已經被排序

2.取出下乙個元素,在已排序的序列二分查詢到第乙個比它大的數的位置

3.將新元素插入到該位置後

4.重複上述兩步

function

binaryinsertsort

(arr)

else

}for

(var j=i-

1;j>=left;j--

) arr[left]

=temp;

}return arr;

}var a=[1

,5,3

,5,2

,9,7

];console.

log(

binaryinsertsort

(a))

//[ 1, 2, 3, 5, 5, 7, 9]

首先在未排序的序列中找到最小(大)元素,存放到排序序列的起始位置,再從剩餘未排序的元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

n個記錄的直接選擇排序可經過n-1趟直接選擇排序得到有序結果。

function

selectsort

(arr)}}

return arr;

}var a=[1

,5,3

,5,2

,9,7

];console.

log(

selectsort

(a))

//[ 1, 2, 3, 5, 5, 7, 9]

氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,若它們的順序錯誤就把它們交換過來。

1.比較相鄰的元素。若第乙個比第二個大,則交換

2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾最後一對

3.針對所有元素重複以上步驟,除了最後乙個

4.重複步驟1~3,直到排序完成

function

bubblesort

(arr)}}

return arr;

}var a=[1

,5,3

,5,2

,9,7

];console.

log(

bubblesort

(a))

//[ 1, 2, 3, 5, 5, 7, 9]

快速排序使用分治法來把乙個串(list)分為兩個串。

1.從數列中挑出乙個元素,稱為「基準」

2.重新排序數列,所有元素比基準值小的擺放在基準值前面,所有元素比基準值大的擺在基準值後面(相同的數可以到任意一邊)。在這個分割槽退出後,該基準就處於數列的中間位置。這個稱為分割槽操作。

3.地櫃地把小於基準值元素的子數列和大於基準值的子數列排序。

function

quicksort

(arr)

var left=

;var right=

;var num=arr[0]

;for

(var i=

1;i)else

}return

quicksort

(left)

.concat

([num]

,quicksort

(right));

}var a=[1

,5,3

,5,2

,9,7

];console.

log(

quicksort

(a))

//[ 1, 2, 3, 5, 5, 7, 9]

計數排序是一種穩定的演算法。使用乙個額外陣列c,其中第i個元素是待排序陣列a中值等於i的元素的個數。然後根據陣列c來將a中的元素排到正確的位置。它只能對整數進行排序。

1.找出待排序陣列中最大和最小的元素

2.統計陣列中每個值為i的元素出現的次數,存入陣列的第i項

3.對所有的計數累加(從c中的第乙個元素開始,每一項和前一項相加)

4.反向填充目標陣列:將每個元素i放在新陣列的第c(i)項,每放乙個元素就將c(i)減去1

function

countsort

(arr)

for(

var j=min;j)for

(var k=arr.length-

1;k>=

0;k--

)returnb;

}var a=[1

,5,3

,5,2

,9,7

];console.

log(

countsort

(a))

//[ 1, 2, 3, 5, 5, 7, 9]

Log4j2 漏洞實戰案例

在現在以及未來的一段時間裡,log4j2 漏洞依然是滲透和排查的重點。在測試靶場裡復現多次,在實戰中遇到還是十分興奮,so,總得記錄點什麼吧。01 漏洞發現 通過burp外掛程式的方式,將log4j2漏洞檢測能力整合到burp進行被動掃瞄。在訪問 抓包的過程中,檢測到目標站點存在log4j2 rce...

Python selenium案例實戰

最近專案有乙個需求 測試人員考勤資料分析結果,歷史的手工測試方式是手動將每一種測試資料依次補加進考勤系統內,這種方式在很大程度上降低了測試的效率,以及資料補加的不準確性,所以,趁此機會,寫了selenium指令碼來替代手工測試。實現功能如下 迴圈補加考勤資料,分別是簽到裝置 簽到時間,簽退裝置 簽退...

2020 10 27實戰案例

實戰案例 encoding utf 8 import numpy as np import matplotlib.pyplot as plt from matplotlib.font manager import fontproperties font fontproperties fname r ...