javascript: 數組詳細操作方法及解析合集(9個改變8個不變12個遍歷)

来源:https://www.cnblogs.com/xuxiaoyu/archive/2018/12/22/10145411.html
-Advertisement-
Play Games

改變原數組的方法(9個): 1 2 3 4 5 let a = [1,2,3]; ES5: a.pop()/ a.shift()/ a.push()/ a.unshift()/ a.reverse()/ a.splice()/ a.sort() ES6: a.copyWithin() / a.fil ...


 

改變原數組的方法(9個):

 
1 2 3 4 5 let a = [1,2,3]; ES5: a.pop()/ a.shift()/ a.push()/ a.unshift()/ a.reverse()/ a.splice()/ a.sort() ES6: a.copyWithin() / a.fill

對於這些能夠改變原數組的方法,要註意避免在迴圈遍歷中改變原數組的選項,比如: 改變數組的長度,導致遍歷的長度出現問題。

pop() 刪除一個數組中的最後的一個元素

定義: pop() 方法刪除一個數組中的最後的一個元素,並且返回這個元素。

參數: 無。

 
1 2 3 let a = [1,2,3]; let item = a.pop(); // 3 console.log(a); // [1,2]

shift() 刪除數組的第一個元素

定義: shift()方法刪除數組的第一個元素,並返回這個元素。

參數: 無。

 
1 2 3 let a = [1,2,3]; let item = a.shift(); // 1 console.log(a); // [2,3]

push() 向數組的末尾添加元素

定義:push() 方法可向數組的末尾添加一個或多個元素,並返回新的長度。

參數: item1, item2, …, itemX ,要添加到數組末尾的元素

 
1 2 3 let a = [1,2,3]; let item = a.push('末尾'); // 4 console.log(a); // [1,2,3,'末尾']

unshift()

定義:unshift() 方法可向數組的開頭添加一個或更多元素,並返回新的長度。

參數: item1, item2, …, itemX ,要添加到數組開頭的元素

 
1 2 3 let a = [1,2,3]; let item = a.unshift('開頭'); // 4 console.log(a); // ['開頭',1,2,3]

reverse() 顛倒數組中元素的順序

定義: reverse() 方法用於顛倒數組中元素的順序。

參數: 無

 
1 2 3 let a = [1,2,3]; a.reverse(); console.log(a); // [3,2,1]

splice() 添加/刪除數組元素

定義: splice() 方法向/從數組中添加/刪除項目,然後返回被刪除的項目

語法: array.splice(index,howmany,item1,.....,itemX)

參數:

  1. index:必需。整數,規定添加/刪除項目的位置,使用負數可從數組結尾處規定位置。
  2. howmany:必需。要刪除的項目數量。如果設置為 0,則不會刪除項目。
  3. item1, …, itemX: 可選。向數組添加的新項目。

返回值: 如果有元素被刪除,返回包含被刪除項目的新數組。

eg1:刪除元素

 
1 2 3 4 5 6 let a = [1, 2, 3, 4, 5, 6, 7]; let item = a.splice(0, 3); // [1,2,3] console.log(a); // [4,5,6,7] // 從數組下標0開始,刪除3個元素 let item = a.splice(-1, 3); // [7] // 從最後一個元素開始刪除3個元素,因為最後一個元素,所以只刪除了7

eg2: 刪除並添加

 
1 2 3 4 5 6 7 8 let a = [1, 2, 3, 4, 5, 6, 7]; let item = a.splice(0,3,'添加'); // [1,2,3] console.log(a); // ['添加',4,5,6,7] // 從數組下標0開始,刪除3個元素,並添加元素'添加'  let b = [1, 2, 3, 4, 5, 6, 7]; let item = b.splice(-2,3,'添加1','添加2'); // [6,7] console.log(b); // [1,2,3,4,5,'添加1','添加2'] // 從數組最後第二個元素開始,刪除3個元素,並添加兩個元素'添加1'、'添加2'

eg3: 不刪除只添加:

 
1 2 3 4 5 6 let a = [1, 2, 3, 4, 5, 6, 7]; let item = a.splice(0,0,'添加1','添加2'); // [] 沒有刪除元素,返回空數組 console.log(a); // ['添加1','添加2',1,2,3,4,5,6,7] let b = [1, 2, 3, 4, 5, 6, 7]; let item = b.splice(-1,0,'添加1','添加2'); // [] 沒有刪除元素,返回空數組 console.log(b); // [1,2,3,4,5,6,'添加1','添加2',7] 在最後一個元素的前面添加兩個元素

從上述三個慄子可以得出:

  1. 數組如果元素不夠,會刪除到最後一個元素為止
  2. 操作的元素,包括開始的那個元素
  3. 可以添加很多個元素
  4. 添加是在開始的元素前面添加的

sort() 數組排序

定義: sort()方法對數組元素進行排序,並返回這個數組。

參數可選: 規定排序順序的比較函數。

預設情況下sort()方法沒有傳比較函數的話,預設按字母升序,如果不是元素不是字元串的話,會調用toString()方法將元素轉化為字元串的Unicode(萬國碼)位點,然後再比較字元。

 
1 2 3 4 5 6 // 字元串排列 看起來很正常 var a = ["Banana", "Orange", "Apple", "Mango"]; a.sort(); // ["Apple","Banana","Mango","Orange"] // 數字排序的時候 因為轉換成Unicode字元串之後,有些數字會比較大會排在後面 這顯然不是我們想要的 var a = [10, 1, 3, 20,25,8]; console.log(a.sort()) // [1,10,20,25,3,8];

比較函數的兩個參數:

sort的比較函數有兩個預設參數,要在函數中接收這兩個參數,這兩個參數是數組中兩個要比較的元素,通常我們用 a 和 b 接收兩個將要比較的元素:

  • 若比較函數返回值<0,那麼a將排到b的前面;
  • 若比較函數返回值=0,那麼a 和 b 相對位置不變;
  • 若比較函數返回值>0,那麼b 排在a 將的前面;

對於sort()方法更深層級的內部實現以及處理機制可以看一下這篇文章深入瞭解javascript的sort方法

sort排序常見用法:

1、數組元素為數字的升序、降序:

 
1 2 3 4 5 6 7 8 9 10 11 12 var array = [10, 1, 3, 4,20,4,25,8]; // 升序 a-b < 0 a將排到b的前面,按照a的大小來排序的 // 比如被減數a是10,減數是20 10-20 < 0 被減數a(10)在減數b(20)前面 array.sort(function(a,b){  return a-b; }); console.log(array); // [1,3,4,4,8,10,20,25]; // 降序 被減數和減數調換了 20-10>0 被減數b(20)在減數a(10)的前面 array.sort(function(a,b){  return b-a; }); console.log(array); // [25,20,10,8,4,4,3,1];

2、數組多條件排序

 
1 2 3 4 5 6 7 8 9 var array = [{id:10,age:2},{id:5,age:4},{id:6,age:10},{id:9,age:6},{id:2,age:8},{id:10,age:9}];  array.sort(function(a,b){   if(a.id === b.id){// 如果id的值相等,按照age的值降序    return b.age - a.age   }else{ // 如果id的值不相等,按照id的值升序    return a.id - b.id   }  })  // [{"id":2,"age":8},{"id":5,"age":4},{"id":6,"age":10},{"id":9,"age":6},{"id":10,"age":9},{"id":10,"age":2}]

3、自定義比較函數,天空才是你的極限

類似的:運用好返回值,我們可以寫出任意符合自己需求的比較函數

 
1 2 3 4 5 6 7 8 9 var array = [{name:'Koro1'},{name:'Koro1'},{name:'OB'},{name:'Koro1'},{name:'OB'},{name:'OB'}]; array.sort(function(a,b){  if(a.name === 'Koro1'){// 如果name是'Koro1' 返回-1 ,-1<0 a排在b的前面   return -1  }else{ // 如果不是的話,a排在b的後面   return 1  } }) // [{"name":"Koro1"},{"name":"Koro1"},{"name":"Koro1"},{"name":"OB"},{"name":"OB"},{"name":"OB"}]

ES6: copyWithin() 指定位置的成員複製到其他位置

定義: 在當前數組內部,將指定位置的成員複製到其他位置,並返回這個數組。

語法:

array.copyWithin(target, start = 0, end = this.length)
參數:

三個參數都是數值,如果不是,會自動轉為數值.

  1. target(必需):從該位置開始替換數據。如果為負值,表示倒數。
  2. start(可選):從該位置開始讀取數據,預設為 0。如果為負值,表示倒數。
  3. end(可選):到該位置前停止讀取數據,預設等於數組長度。使用負數可從數組結尾處規定位置。

瀏覽器相容(MDN): chrome 45,Edge 12,Firefox32,Opera 32,Safari 9, IE 不支持

eg:

 
1 2 3 4 5 6 7 // -2相當於3號位,-1相當於4號位 [1, 2, 3, 4, 5].copyWithin(0, -2, -1) // [4, 2, 3, 4, 5] var a=['OB1','Koro1','OB2','Koro2','OB3','Koro3','OB4','Koro4','OB5','Koro5'] // 2位置開始被替換,3位置開始讀取要替換的 5位置前面停止替換 a.copyWithin(2,3,5) // ["OB1","Koro1","Koro2","OB3","OB3","Koro3","OB4","Koro4","OB5","Koro5"]

從上述慄子:

  1. 第一個參數是開始被替換的元素位置
  2. 要替換數據的位置範圍:從第二個參數是開始讀取的元素,在第三個參數前面一個元素停止讀取
  3. 數組的長度不會改變
  4. 讀了幾個元素就從開始被替換的地方替換幾個元素

ES6: fill() 填充數組

定義: 使用給定值,填充一個數組。

參數:

第一個元素(必須): 要填充數組的值

第二個元素(可選): 填充的開始位置,預設值為0

第三個元素(可選):填充的結束位置,預設是為this.length

 

 
1 2 3 4 ['a', 'b', 'c'].fill(7) // [7, 7, 7] ['a', 'b', 'c'].fill(7, 1, 2) // ['a', 7, 'c']

不改變原數組的方法(8個):

ES5:
join、toLocateString、toStrigin、slice、cancat、indexOf、lastIndexOf、
ES7:
includes

join() 數組轉字元串

定義: join() 方法用於把數組中的所有元素通過指定的分隔符進行分隔放入一個字元串,返回生成的字元串。

語法:

array.join(str)
參數:

str(可選): 指定要使用的分隔符,預設使用逗號作為分隔符。

 
1 2 3 let a= ['hello','world']; let str=a.join(); // 'hello,world' let str2=a.join('+'); // 'hello+world'

使用join方法或者下文說到的toString方法時,當數組中的元素也是數組或者是對象時會出現什麼情況?

 
1 2 3 4 5 let a= [['OBKoro1','23'],'test']; let str1=a.join(); // OBKoro1,23,test let b= [{name:'OBKoro1',age:'23'},'test']; let str2 = b.join(); // [object Object],test // 對象轉字元串推薦JSON.stringify(obj);

所以,join()/toString()方法在數組元素是數組的時候,會將裡面的數組也調用join()/toString(),如果是對象的話,對象會被轉為[object Object]字元串。

toLocaleString() 數組轉字元串

定義: 返回一個表示數組元素的字元串。該字元串由數組中的每個元素的 toLocaleString() 返回值經調用 join() 方法連接(由逗號隔開)組成。

語法:

array.toLocaleString()
參數:無。

 
1 2 let a=[{name:'OBKoro1'},23,'abcd',new Date()]; let str=a.toLocaleString(); // [object Object],23,abcd,2018/5/28 下午1:52:20

如上述慄子:調用數組的toLocaleString方法,數組中的每個元素都會調用自身的toLocaleString方法,對象調用對象的toLocaleString,Date調用Date的toLocaleString。

toString() 數組轉字元串 不推薦

定義: toString() 方法可把數組轉換為由逗號鏈接起來的字元串。

語法:

array.toString()
參數: 無。

該方法的效果和join方法一樣,都是用於數組轉字元串的,但是與join方法相比沒有優勢,也不能自定義字元串的分隔符,因此不推薦使用。

值得註意的是:當數組和字元串操作的時候,js 會調用這個方法將數組自動轉換成字元串

 
1 2 let b= [ 'toString','演示'].toString(); // toString,演示 let a= ['調用toString','連接在我後面']+'啦啦啦'; // 調用toString,連接在我後面啦啦啦

slice() 淺拷貝數組的元素

定義: 方法返回一個從開始到結束(不包括結束)選擇的數組的一部分淺拷貝到一個新數組對象,且原數組不會被修改。

註意:字元串也有一個slice() 方法是用來提取字元串的,不要弄混了。

語法:

array.slice(begin, end);
參數:

begin(可選): 索引數值,接受負值,從該索引處開始提取原數組中的元素,預設值為0。

end(可選):索引數值(不包括),接受負值,在該索引處前結束提取原數組元素,預設值為數組末尾(包括最後一個元素)。

 
1 2 3 4 5 6 let a= ['hello','world']; let b=a.slice(0,1); // ['hello'] a[0]='改變原數組'; console.log(a,b); // ['改變原數組','world'] ['hello'] b[0]='改變拷貝的數組';  console.log(a,b); // ['改變原數組','world'] ['改變拷貝的數組']

如上:新數組是淺拷貝的,元素是簡單數據類型,改變之後不會互相干擾。

如果是複雜數據類型(對象,數組)的話,改變其中一個,另外一個也會改變。

 
1 2 3 4 5 6 7 let a= [{name:'OBKoro1'}]; let b=a.slice(); console.log(b,a); // [{"name":"OBKoro1"}] [{"name":"OBKoro1"}] // a[0].name='改變原數組'; // console.log(b,a); // [{"name":"改變原數組"}] [{"name":"改變原數組"}] // b[0].name='改變拷貝數組',b[0].koro='改變拷貝數組'; // [{"name":"改變拷貝數組","koro":"改變拷貝數組"}] [{"name":"改變拷貝數組","koro":"改變拷貝數組"}]

原因在定義上面說過了的:slice()是淺拷貝,對於複雜的數據類型淺拷貝,拷貝的只是指向原數組的指針,所以無論改變原數組,還是淺拷貝的數組,都是改變原數組的數據。

cancat

定義: 方法用於合併兩個或多個數組,返回一個新數組。

語法:

var newArr =oldArray.concat(arrayX,arrayX,......,arrayX)
參數:

arrayX(必須):該參數可以是具體的值,也可以是數組對象。可以是任意多個。

eg1:

 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 let a = [1, 2, 3];  let b = [4, 5, 6];  //連接兩個數組  let newVal=a.concat(b); // [1,2,3,4,5,6]  // 連接三個數組  let c = [7, 8, 9]  let newVal2 = a.concat(b, c); // [1,2,3,4,5,6,7,8,9]  // 添加元素  let newVal3 = a.concat('添加元素',b, c,'再加一個');  // [1,2,3,"添加元素",4,5,6,7,8,9,"再加一個"] // 合併嵌套數組 會淺拷貝嵌套數組 let d = [1,2 ]; let f = [3,[4]]; let newVal4 = d.concat(f); // [1,2,3,[4]]

ES6擴展運算符...合併數組:

因為ES6的語法更簡潔易懂,所以現在合併數組我大部分採用...來處理,...運算符可以實現cancat的每個慄子,且更簡潔和具有高度自定義數組元素位置的效果。

 
1 2 3 let a = [2, 3, 4, 5] let b = [ 4,...a, 4, 4] console.log(a,b); // [2, 3, 4, 5] [4,2,3,4,5,4,4]

indexOf() 查找數組是否存在某個元素,返回下標

定義: 返回在數組中可以找到一個給定元素的第一個索引,如果不存在,則返回-1。

語法:

array.indexOf(searchElement,fromIndex)
參數:

searchElement(必須):被查找的元素

fromIndex(可選):開始查找的位置(不能大於等於數組的長度,返回-1),接受負值,預設值為0。

嚴格相等的搜索:

數組的indexOf搜索跟字元串的indexOf不一樣,數組的indexOf使用嚴格相等===搜索元素,即數組元素要完全匹配才能搜索成功。

註意:indexOf()不能識別NaN

eg:

 
1 2 3 4 let a=['啦啦',2,4,24,NaN] console.log(a.indexOf('啦')); // -1 console.log(a.indexOf('NaN')); // -1 console.log(a.indexOf('啦啦')); // 0

使用場景:

  1. 數組去重
  2. 根據獲取的數組下標執行操作,改變數組中的值等。
  3. 判斷是否存在,執行操作。

lastIndexOf() 查找指定元素在數組中的最後一個位置

定義: 方法返回指定元素,在數組中的最後一個的索引,如果不存在則返回 -1。(從數組後面往前查找)

語法:

arr.lastIndexOf(searchElement,fromIndex)
參數:

searchElement(必須): 被查找的元素

fromIndex(可選): 逆向查找開始位置,預設值數組的長度-1,即查找整個數組。

關於fromIndex有三個規則:

  1. 正值。如果該值大於或等於數組的長度,則整個數組會被查找。
  2. 負值。將其視為從數組末尾向前的偏移。(比如-2,從數組最後第二個元素開始往前查找)
  3. 負值。其絕對值大於數組長度,則方法返回 -1,即數組不會被查找。

 
1 2 3 4 5 let a=['OB',4,'Koro1',1,2,'Koro1',3,4,5,'Koro1']; // 數組長度為10 // let b=a.lastIndexOf('Koro1',4); // 從下標4開始往前找 返回下標2 // let b=a.lastIndexOf('Koro1',100); // 大於或數組的長度 查找整個數組 返回9 // let b=a.lastIndexOf('Koro1',-11); // -1 數組不會被查找 let b=a.lastIndexOf('Koro1',-9); // 從第二個元素4往前查找,沒有找到 返回-1

ES7 includes() 查找數組是否包含某個元素 返回布爾

定義: 返回一個布爾值,表示某個數組是否包含給定的值

語法:

array.includes(searchElement,fromIndex=0)
參數:

searchElement(必須):被查找的元素

fromIndex(可選):預設值為0,參數表示搜索的起始位置,接受負值。正值超過數組長度,數組不會被搜索,返回false。負值絕對值超過長數組度,重置從0開始搜索。

includes方法是為了彌補indexOf方法的缺陷而出現的:

  1. indexOf方法不能識別NaN
  2. indexOf方法檢查是否包含某個值不夠語義化,需要判斷是否不等於-1,表達不夠直觀

eg:

 
1 2 3 4 5 let a=['OB','Koro1',1,NaN]; // let b=a.includes(NaN); // true 識別NaN // let b=a.includes('Koro1',100); // false 超過數組長度 不搜索 // let b=a.includes('Koro1',-3); // true 從倒數第三個元素開始搜索 // let b=a.includes('Koro1',-100); // true 負值絕對值超過數組長度,搜索整個數組

相容性(MDN): chrome47, Firefox 43,Edge 14,Opera 34, Safari 9,IE 未實現。

遍歷方法(12個):

js中遍曆數組並不會改變原始數組的方法總共有12個:

ES5:
forEach、every 、some、 fliter、map、reduce、reduceRight、
ES6:
find、findIndex、keys、values、entries

關於遍歷:

  • 儘量不要在遍歷的時候,修改後面要遍歷的值
  • 儘量不要在遍歷的時候修改數組的長度(刪除/添加)

forEach
定義: 按升序為數組中含有效值的每一項執行一次回調函數。

語法:

array.forEach(function(currentValue, index, arr), thisValue)
參數:

function(必須): 數組中每個元素需要調用的函數。

// 回調函數的參數
1. currentValue(必須),數組當前元素的值
2. index(可選), 當前元素的索引值
3. arr(可選),數組對象本身

hisValue(可選): 當執行回調函數時this綁定對象的值,預設值為undefined

關於forEach()你要知道:

  • 無法中途退出迴圈,只能用return退出本次回調,進行下一次回調。
  • 它總是返回 undefined值,即使你return了一個值。

下麵類似語法同樣適用這些規則

1. 對於空數組是不會執行回調函數的
2. 對於已在迭代過程中刪除的元素,或者空元素會跳過回調函數
3. 遍歷次數再第一次迴圈前就會確定,再添加到數組中的元素不會被遍歷。
4. 如果已經存在的值被改變,則傳遞給 callback 的值是遍歷到他們那一刻的值。

eg:

 
1 2 3 4 5 6 7 8 9 10 11 12 13 let a = [1, 2, ,3]; // 最後第二個元素是空的,不會遍歷(undefined、null會遍歷) let obj = { name: 'OBKoro1' }; let result = a.forEach(function (value, index, array) {  a[3] = '改變元素';  a.push('添加到尾端,不會被遍歷')  console.log(value, 'forEach傳遞的第一個參數'); // 分別列印 1 ,2 ,改變元素  console.log(this.name); // OBKoro1 列印三次 this綁定在obj對象上  // break; // break會報錯  return value; // return只能結束本次回調 會執行下次回調  console.log('不會執行,因為return 會執行下一次迴圈回調') }, obj); console.log(result); // 即使return了一個值,也還是返回undefined // 回調函數也接受接頭函數寫法

every 檢測數組所有元素是否都符合判斷條件

定義: 方法用於檢測數組所有元素是否都符合函數定義的條件

語法:

array.every(function(currentValue, index, arr), thisValue)
參數:(這幾個方法的參數,語法都類似)

function(必須): 數組中每個元素需要調用的函數。

// 回調函數的參數
1. currentValue(必須),數組當前元素的值
2. index(可選), 當前元素的索引值
3. arr(可選),數組對象本身

thisValue(可選): 當執行回調函數時this綁定對象的值,預設值為undefined

方法返回值規則:

  1. 如果數組中檢測到有一個元素不滿足,則整個表達式返回 false,且剩餘的元素不會再進行檢測。
  2. 如果所有元素都滿足條件,則返回 true。=

eg:

 
1 2 3 4 5 6 7 8 function isBigEnough(element, index, array) {  return element >= 10; // 判斷數組中的所有元素是否都大於10 } let result = [12, 5, 8, 130, 44].every(isBigEnough); // false let result = [12, 54, 18, 130, 44].every(isBigEnough); // true // 接受箭頭函數寫法 [12, 5, 8, 130, 44].every(x => x >= 10); // false [12, 54, 18, 130, 44].every(x => x >= 10); // true

some 數組中的是否有滿足判斷條件的元素

定義:數組中的是否有滿足判斷條件的元素

語法:

array.some(function(currentValue, index, arr), thisValue)
參數:(這幾個方法的參數,語法都類似)

function(必須): 數組中每個元素需要調用的函數。

// 回調函數的參數
1. currentValue(必須),數組當前元素的值
2. index(可選), 當前元素的索引值
3. arr(可選),數組對象本身

thisValue(可選): 當執行回調函數時this綁定對象的值,預設值為undefined

方法返回值規則:

  1. 如果有一個元素滿足條件,則表達式返回true, 剩餘的元素不會再執行檢測。
  2. 如果沒有滿足條件的元素,則返回false。

 
1 2 3 4 5
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • TextSwitcher集成了ViewSwitcher, 因此它具有與ViewSwitcher相同的特性:可以在切換View組件時使用動畫效果。與ImageSwitcher相似的是,使用TextSwitcher也需要設置一個ViewFactory。與ImageSwitcher不同的是,TextSwi ...
  • 一、前言 今天帶來的是王牌大作戰的破解教程,游戲下載的話,我是直接去TapTap官網下載的 支付寶內購破解用老套了,今天學點破解的新花樣吧!! 二、支付寶內購破解 支付寶的內購破解已經很熟悉了, 直接搜索“9000”,之後找到代碼,修改判斷條件即可,若不明白,請看我之前寫的博客,Android破解之 ...
  • 1.請描述一下 cookies,sessionStorage 和 localStorage 的區別? 2.請解釋一下CSS3的Flexbox(彈性盒佈局模型),以及適用場景? 3.為什麼要初始化CSS樣式? 4.如何實現數組的隨機排序? 5.javascript 代碼中的"use strict";是 ...
  • websocket 初識 前言 其實很早就知道了 websocket 這個概念了,像現在大火的直播等使用的就是 websocket。之前找爬蟲工作,對面問我爬過 websocket 網站沒,很汗顏,那時候還只是聽說過。現在想瞭解一下,基於 JavaScript 語言。 Websocket 是什麼 w ...
  • 前言:什麼是ES6?ECMAScript 6(簡稱ES6)是JavaScript語言的下一代標準,已經在2015年6月正式發佈了。其中相比較於ES5新增了諸多的特性,並且ES6可轉換為ES5的語法。->線上ES6轉換為ES5工具。 本系列學習隨筆參考了阮一峰老師的《ES6標準入門》。 一、let關鍵 ...
  • JavaScript 系列博客之(四) 前言 本篇介紹 JavaScript 中的對象。在第一篇博客中已經說到 JavaScript 是一種‘’對象模型‘’語言。所以可以這樣說,對象是 JavaScript 語言的核心概念,也是最重要的數據類型。 概述 生成方法 在 JavaScript 中聲稱對象 ...
  • 昨天晚上,花了點時間學習了Chrome插件的製作方法,並書寫了《Chrome 百度搜索熱點過濾插件 - 開源軟體》這一文章,簡單地介紹自己實現的百度搜索熱點過濾神器的原理和使用方式,併進行了開源(https://github.com/yaowenxu/Hot-Search-Killer)(哈哈,很簡 ...
  • react本身能夠完成動態數據的監聽和更新,如果不是必要可以不適用redux。 安裝redux: cnpm install redux --save,或者yarn add redux。 一、react基本用法 redux是獨立的用於狀態管理的第三方包,它建立狀態機來對單項數據進行管理。 上圖是個人粗 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...