寫在前面:續接上篇 JavaScript 陣列 常用方法
陣列常用方法第二彈來了;
some && every
描述:
every
()與some
()方法都是JS中陣列的迭代方法。
some
方法對陣列中每個元素呼叫被提供的函式,如果有任何一個元素結果為true
則返回true
否則返回false
。every
方法對陣列中每個元素呼叫被提供的函式,如果所有元素結果為true
則返回true
否則返回false
。
some
一直在找符合條件的值,一旦找到,則不會繼續迭代下去。every
從迭代開始,一旦有一個不符合條件,則不會繼續迭代下去。
注意:如果用一個空陣列對兩個方法進行測試:
_some_
在任何情況下它返回的都是_false_
。_every_
在任何情況下它返回的都是_true_
。
語法:
兩個方法的語法是一樣的,只是返回的結果不同。
Array.some(callback(element, index, array), thisValue)
Array.every(callback(element, index, array), thisValue)
引數:
兩個函式的引數是一樣的。
callback與thisValue
引數 | 是否可選 | 描述 | |
---|---|---|---|
引數一 | callback | 必選 | 用來測試陣列的每個元素的函式。 |
引數二 | thisValue | 可選 | 執行 callback 時,用於 this 的值。 物件作為該執行回撥時使用,傳遞給函式。 如果省略了 thisValue ,"this" 的值為 "undefined" |
- callback的引數列表
引數 | 是否可選 | 描述 | |
---|---|---|---|
引數一 | element | 必選 | 當前元素 |
引數二 | index | 可選 | 當前元素的索引值 |
引數三 | array | 可選 | 呼叫了 some && every 的陣列本身 |
- thisValue的引數
可選。要傳遞給函式以用作其 "this" 值的值。
如果此引數為空,則值 "undefined" 將作為其 "this" 值傳遞。
返回值:
返回值為布林(Boolean)值,
_some_
如果有任何一個元素結果為true
則返回true
否則返回false
。_every_
如果所有元素結果為true
則返回true
否則返回false
。
示例:
const Array = [
{ name: "孫悟空", age: 3 },
{ name: "豬八戒", age: 4 },
{ name: "沙和尚", age: 5 },
];
// 檢查陣列中是否有人 age 為 4
let some = Array.some(
(item) => {
return item.age === 4;
}
);
// 檢查陣列中是否所有人 age 為 4
let every = Array.every(
(item) => {
return item.age === 4;
}
);
console.log(some); // true
console.log(every); // false
細節:
some && every
遍歷的元素範圍在第一次呼叫 callback 之前就已確定了。
在呼叫
some && every
之後新增到陣列中的元素不會被 callback 訪問到。如果陣列中存在的元素被更改,則他們傳入 callback 的值是some && every
訪問到他們那一刻的值。那些被刪除的元素或從來未被賦值的元素將不會被訪問到。
find && findIndex
描述:
find
()與findIndex
()方法都是JS中陣列用來查詢目標元素的方法。
find()
方法對陣列中每個元素呼叫被提供的函式,如果滿足該函式,就返回滿足該函式的第一個元素的值,否則返回undefined
。findIndex()
方法對陣列中每個元素呼叫被提供的函式,如果滿足該函式,就返回滿足該函式的第一個元素的索引值,否則返回-1
。
簡單來說:
find()
方法用來查詢目標元素,找到就返回該元素,找不到返回undefined
。findIndex()
方法查詢目標元素,找到就返回元素的位置,找不到就返回-1
。
這兩個方法區別在於返回值,一個返回陣列中找到的元素的值,一個返回陣列中找到的元素的索引。
語法:
兩個方法的語法是一樣的,只是返回的結果不同。
Array.find(callback(element, index, array), thisValue)
Array.findIndex(callback(element, index, array), thisValue)
引數:
兩個方法的引數是一樣的。
callback與thisValue
引數 | 是否可選 | 描述 | |
---|---|---|---|
引數一 | callback | 必選 | 用來測試陣列的每個元素的函式。 |
引數二 | thisValue | 可選 | 執行 callback 時,用於 this 的值。 物件作為該執行回撥時使用,傳遞給函式。 如果省略了 thisValue ,"this" 的值為 "undefined" |
- callback的引數列表
引數 | 是否可選 | 描述 | |
---|---|---|---|
引數一 | element | 必選 | 當前元素 |
引數二 | index | 可選 | 當前元素的索引值 |
引數三 | array | 可選 | 呼叫了 find && findIndex 的陣列本身 |
- thisValue的引數
可選。要傳遞給函式以用作其 "this" 值的值。
如果此引數為空,則值 "undefined" 將作為其 "this" 值傳遞。
返回值:
返回值不同:
find
返回滿足所提供函式的第一個元素的值,否則返回undefined
。findIndex
返回滿足所提供函式的第一個元素元素的索引,否則返回-1
。
示例:
const Array = [
{ name: "孫悟空", age: 3 },
{ name: "豬八戒", age: 4 },
{ name: "沙和尚", age: 5 },
];
// 查詢陣列中 age 為 4 的值
let find = Array.find(
(item) => {
return item.age === 4;
}
);
// 查詢陣列中 age 為 4 元素的索引
let findIndex = Array.findIndex(
(item) => {
return item.age === 4;
}
);
console.log(find); // { name: "豬八戒", age: 4 } 返回值為 value
console.log(findIndex); // 1 返回值為 索引值
細節:
find && findIndex
方法在第一次呼叫callback
函式時會確定元素的索引範圍
在
find && findIndex
方法開始執行之後新增到陣列的新元素將不會被callback
函式訪問到。如果陣列中一個尚未被callback函式訪問到的元素的值被callback
函式所改變,那麼當callback
函式訪問到它時,它的值是將是根據它在陣列中的索引所訪問到的當前值。被刪除的元素仍然會被訪問到。
slice && splice
描述:
slice()
與splice()
方法都是JS中陣列用來刪除陣列元素並返回操作結果。
- slice() 方法以新的陣列物件,返回陣列中被選中的元素。
- splice() 方法通過刪除或替換現有元素或者原地新增新的元素來修改陣列,並以陣列形式返回被修改的內容。
splice用法不僅僅是刪除,它還能夠實現對陣列元素的刪除、插入、替換操作,返回值為被操作的值。
⚠️注意:_splice會導致陣列塌陷。陣列塌陷:使用splice刪除元素時,剩餘的陣列元素索引的順序會改變。
語法:
兩個方法的語法是不一樣的。
Array.slice(begin, end);
Array.splice(start, deleteCount, item1, item2, ... ,itemx);
引數:
兩個方法的引數是不一樣的。在 MDN 中這些引數是這樣描述的:
slice()
的引數:
begin 與 end
引數 | 是否可選 | 描述 | |
---|---|---|---|
引數一 | begin | 可選 | 提取起始處的索引(從 0 開始)從該索引開始提取原陣列元素 |
引數二 | end | 可選 | 提取終止處的索引(從 0 開始)在該索引處結束提取原陣列元素 |
- begin
- 提取起始處的索引(從 0 開始),從該索引開始提取原陣列元素。
- 如果該引數為負數,則表示從原陣列中的倒數第幾個元素開始提取,slice(-2) 表示提取原陣列中的倒數第二個元素到最後一個元素(包含最後一個元素)。
- 如果省略 begin,則 slice 從索引 0 開始。
- 如果 begin 超出原陣列的索引範圍,則會返回空陣列。
- end
- 提取終止處的索引(從 0 開始),在該索引處結束提取原陣列元素。slice 會提取原陣列中索引從 begin 到 end 的所有元素(包含 begin,但不包含 end)。
- slice(1,4) 會提取原陣列中從第二個元素開始一直到第四個元素的所有元素 (索引為 1, 2, 3的元素)。
- 如果該引數為負數, 則它表示在原陣列中的倒數第幾個元素結束抽取。 slice(-2,-1) 表示抽取了原陣列中的倒數第二個元素到最後一個元素(不包含最後一個元素,也就是隻有倒數第二個元素)。
- 如果 end 被省略,則 slice 會一直提取到原陣列末尾。
- 如果 end 大於陣列的長度,slice 也會一直提取到原陣列末尾。
splice()
的引數
start 與 deleteCount 與 item1, item2, ..., itemx
引數 | 是否可選 | 描述 | |
---|---|---|---|
引數一 | start | 必選 | 指定修改的開始位置(從0計數) |
引數二 | deleteCount | 可選 | 整數,表示要移除的陣列元素的個數。 |
引數三 | item1, item2, ..., itemx | 可選 | 要新增進陣列的元素,從start 位置開始。 |
- start
指定修改的開始位置(從0計數)。如果超出了陣列的長度,則從陣列末尾開始新增內容;如果是負值,則表示從陣列末位開始的第幾位(從-1計數,這意味著-n是倒數第n個元素並且等價於(array.length-n);如果負數的絕對值大於陣列的長度,則表示開始位置為第0位。
- deleteCount
- 整數,表示要移除的陣列元素的個數。
- 如果 deleteCount 大於 start 之後的元素的總數,則從 start 後面的元素都將被刪除(含第 start 位)。
- 如果 deleteCount 被省略了,或者它的值大於等於array.length - start(也就是說,如果它大於或者等於start之後的所有元素的數量),那麼start之後陣列的所有元素都會被刪除。
- 如果 deleteCount 是 0 或者負數,則不移除元素。這種情況下,至少應新增一個新元素。
- item1, item2, ..., itemx
要新增進陣列的元素,從start 位置開始。如果不指定,則 splice() 將只刪除陣列元素。
返回值:
返回值不同:
- slice 一個含有被提取元素的新陣列。
- splice 由被刪除的元素組成的一個陣列。如果只刪除了一個元素,則返回只包含一個元素的陣列。如果沒有刪除元素,則返回空陣列。
示例:
const Array = [
{ name: "孫悟空", age: 3 },
{ name: "豬八戒", age: 4 },
{ name: "沙和尚", age: 5 },
];
// 查詢陣列中 age 為 4 的值
const slice = Array.slice(0, 2);
// 查詢陣列中 age 為 4 元素的索引
const splice = Array.splice(0, 0, { name: "唐僧", age: 2 });
console.log(slice);
/*
{ name: "孫悟空", age: 3 },
{ name: "豬八戒", age: 4 },
*/
console.log(splice); // 【】//向陣列中增加一個元素
console.log(Array); //
/*
{ name: "唐僧", age: 2 }
{ name: "孫悟空", age: 3 },
{ name: "豬八戒", age: 4 },
{ name: "沙和尚", age: 5 },
*/
細節:
slice
如果向兩個陣列任一中新增了新元素,則另一個不會受到影響。但如果是原陣列中有一是個物件引用(不是實際的物件)
slice
會拷貝這個物件引用到新的陣列裡,兩個物件引用是相同的,那麼被引用的物件改變,則新的和原陣列中的這個元素也會發生改變。
splice
如果新增進陣列的元素個數不等於被刪除的元素個數,陣列的長度會發生相應的改變。
方法列表
方法屬性:
方法 | 改變原陣列 | 返回值描述 | 描述 |
---|---|---|---|
some() | 否 | 布林值 | 檢查陣列。 |
every() | 否 | 布林值 | 檢查陣列。 |
find() | 否 | 所查詢到的值 | 查詢目標元素。 |
findindex() | 否 | 所查詢到的值的索引值 | 查詢目標元素。 |
slice() | 否 | 一個含有被提取元素的新陣列 | 刪除陣列元素。 |
splice() | 是 | 被刪除的元素組成的一個陣列 | 刪除陣列元素。 |