JavaScript大數組如何根據對象的key快速找到並刪除


查找:上代碼.

function isBigEnough(element) {
    return element >= 15;
}

var ret1 = [12, 5, 8, 130, 44].findIndex(isBigEnough);
console.log(ret1);
// index of 4th element in the Array is returned,
// so this will result in '3'
var objArr = [{id:1, name:'jiankian'}, {id:23, name:'anan'}, {id:188, name:'superme'}, {id:233, name:'jobs'}, {id:288, name:'bill', age:89}, {id:333}] ;
var ret2 = objArr.findIndex((v) => {
    return v.id == 233;
});
console.log(ret2);
// return 3

findIndex()方法返回數組中滿足提供的測試函數的第一個元素的索引。否則返回-1。

語法:

arr.findIndex(callback[, thisArg])

參數:

callback針對數組中的每個元素, 都會執行該回調函數, 執行時會自動傳入下面三個參數:

element
當前元素。
index
當前元素的索引。
array
調用findIndex的數組。

thisArg可選。執行callback時作為this對象的值.

描述:

findIndex方法對數組中的每個數組索引0..length-1(包括)執行一次callback函數,直到找到一個callback函數返回真實值(強制為true)的值。如果找到這樣的元素,findIndex會立即返回該元素的索引。如果回調從不返回真值,或者數組的length為0,則findIndex返回-1。 與某些其他數組方法(如Array#some)不同,在稀疏數組中,即使對於數組中不存在的條目的索引也會調用回調函數。

回調函數調用時有三個參數:元素的值,元素的索引,以及被遍歷的數組。

如果一個 thisArg 參數被提供給 findIndex, 它將會被當作this使用在每次回調函數被調用的時候。如果沒有被提供,將會使用undefined

findIndex不會修改所調用的數組。

在第一次調用callback函數時會確定元素的索引范圍,因此在findIndex方法開始執行之后添加到數組的新元素將不會被callback函數訪問到。如果數組中一個尚未被callback函數訪問到的元素的值被callback函數所改變,那么當callback函數訪問到它時,它的值是將是根據它在數組中的索引所訪問到的當前值。被刪除的元素仍然會被訪問到。

示例

查找數組中首個質數元素的索引

以下示例查找數組中素數的元素的索引(如果不存在素數,則返回-1)。

function isPrime(element, index, array) {
  var start = 2;
  while (start <= Math.sqrt(element)) {
    if (element % start++ < 1) {
      return false;
    }
  }
  return element > 1;
}

console.log([4, 6, 8, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 12].findIndex(isPrime)); // 2

 

 


刪除:上代碼.

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];

myFish.splice(2, 0, 'drum'); // 在索引為2的位置插入'drum'
// myFish 變為 ["angel", "clown", "drum", "mandarin", "sturgeon"]

myFish.splice(2, 1); // 從索引為2的位置刪除一項(也就是'drum'這一項)
// myFish 變為 ["angel", "clown", "mandarin", "sturgeon"]

語法

array.splice(start)

array.splice(start, deleteCount) 

array.splice(start, deleteCount, item1, item2, ...)

參數

start​
指定修改的開始位置(從0計數)。如果超出了數組的長度,則從數組末尾開始添加內容;如果是負值,則表示從數組末位開始的第幾位(從-1計數);若只使用start參數而不使用deleteCount、item,如:array.splice(start) ,表示刪除[start,end]的元素。
deleteCount 可選
整數,表示要移除的數組元素的個數。如果 deleteCount 是 0,則不移除元素。這種情況下,至少應添加一個新元素。如果 deleteCount 大於start 之后的元素的總數,則從 start 后面的元素都將被刪除(含第 start 位)。
如果deleteCount被省略,則其相當於(arr.length - start)。
item1, item2, ... 可選
要添加進數組的元素,從start 位置開始。如果不指定,則 splice() 將只刪除數組元素。

splice方法使用deleteCount參數來控制是刪除還是添加:
start參數是必須的,表示開始的位置(從0計數),如:start=0從第一個開始;start>= array.length-1表示從最后一個開始。
①、從start位置開始刪除[start,end]的元素。
array.splice(start)
②、從start位置開始刪除[start,Count]的元素。
array.splice(start, deleteCount)    
③、從start位置開始添加item1, item2, ...元素。
array.splice(start, 0, item1, item2, ...)   

返回值

由被刪除的元素組成的一個數組。如果只刪除了一個元素,則返回只包含一個元素的數組。如果沒有刪除元素,則返回空數組。

描述

如果添加進數組的元素個數不等於被刪除的元素個數,數組的長度會發生相應的改變。

提示和注釋

注釋:請注意,splice() 方法與 slice() 方法的作用是不同的,splice() 方法會直接對數組進行修改。

示例

從第2位開始刪除0個元素,插入“drum”

var myFish = ["angel", "clown", "mandarin", "surgeon"]; 
//從第 2 位開始刪除 0 個元素,插入 "drum" 
var removed = myFish.splice(2, 0, "drum"); 
//運算后的 myFish:["angel", "clown", "drum", "mandarin", "surgeon"] 
//被刪除元素數組:[],沒有元素被刪除

 

從第3位開始刪除1個元素

var myFish = ['angel', 'clown', 'drum', 'mandarin', 'sturgeon'];
var removed = myFish.splice(3, 1);
//運算后的myFish:["angel", "clown", "drum", "sturgeon"]
//被刪除元素數組:["mandarin"]

 

從第2位開始刪除1個元素,然后插入“trumpet”

var myFish = ['angel', 'clown', 'drum', 'sturgeon'];
var removed = myFish.splice(2, 1, "trumpet"); 
//運算后的myFish: ["angel", "clown", "trumpet", "surgeon"] 
//被刪除元素數組:["drum"]

 

從第0位開始刪除2個元素,然后插入"parrot","anemone"和"blue"

var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');
// 運算后的myFish: ["parrot", "anemone", "blue", "trumpet", "sturgeon"] 
// 被刪除元素數組:["angel", "clown"]

 

從第2位開始刪除2個元素

var myFish = ['parrot', 'anemone', 'blue', 'trumpet', 'sturgeon'];
var removed = myFish.splice(myFish.length - 3, 2);
// 運算后的myFish: ["parrot", "anemone", "sturgeon"] 
// 被刪除元素數組:["blue", "trumpet"]

 

從第2位開始刪除所有元素

var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(2);
// 運算后的myFish :["angel", "clown"] 
// 被刪除的元素數組: ["mandarin", "sturgeon"]
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM