我通過考慮排序演算法進入了這個問題。
在解釋、編譯或運行時階段更改陣列中的元素位置是否相同,以使用新元素重新創建整個陣列?
它會從一種語言徹底改變到另一種語言嗎?
它是如何作業的?
想象一下 JavaScript 中的特定情況,例如:
let animals = ["monkey","zebra","banana","capybara"];
animals.splice(2,1); // returns ["banana"]
宣告整個animals陣列被重寫是否正確?還是有其他型別的更改型別?在計算方面,這個唯一的改變將如何作業?
Javascript 檔案中指出,該.splice()方法“獲取”一個陣列物件,在沒有它的情況下創建一個新陣列并回傳另一個陣列作為輸出,但它是如何作業的?
我是一個初學者,所以請耐心等待,如果可能的話,希望有一個好的閱讀推薦,以了解更多關于它的資訊。給您帶來的不便深表歉意。
uj5u.com熱心網友回復:
在解釋、編譯或運行時階段更改陣列中的元素位置是否相同,以使用新元素重新創建整個陣列?
我想你在問這個:
更改陣列中的元素位置是否會使用新元素重新創建整個陣列?
- 如果您使用陣列 indexer
[],那么no:陣列不會重新創建,它會在原地發生變異。 - 如果您使用
Array.prototype.splice,則no:不會重新創建陣列,而是就地 變異。- 但
splice確實回傳一個包含已洗掉元素的新陣列。
- 但
- 如果您使用
Array.prototype.filterand/orArray.prototype.map,則yes:回傳一個僅包含過濾元素的新陣列(并且原始輸入陣列根本未修改:即沒有任何變化)。 - 如果您使用
Array.prototype.forEach將元素分配回自身(無論如何您都不應該這樣做),那么不會:陣列就地突變。
想象一下 JavaScript 中的特定情況,例如:
let animals = ["monkey","zebra","banana","capybara"]; animals.splice(2,1); // returns ["banana"]宣告整個
animals陣列被重寫是否正確?
不,那是不正確的。
正確的說法是“animals陣列發生了變異”。
Javascript 檔案中指出,該
.splice()方法“獲取”一個陣列物件,在沒有它的情況下創建一個新陣列并回傳另一個陣列作為輸出,但它是如何作業的?
我不知道您指的是什么“JavaScript 檔案”,但這是不正確的。
JavaScript 檔案的唯一權威來源要么是官方的 ECMAScript 規范,要么是MDN 上記錄的 JavaScript 引擎供應商(例如 Mozilla 的 Spidermonkey)提供的檔案。
W3Schools 等來源不具權威性。
...而 MDN 這么說splice(強調我的):
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
該
splice()方法通過洗掉或替換現有元素和/或在適當位置添加新元素來更改陣列的內容。
它是如何作業的?
該splice函式的內部作業在 ECMAScript 規范(第 23.1.3.29 節)中定義。
...可以概括為:
- 給定
splice帶有引數的呼叫( this: Array, start: int, deleteCount: int );... - 創建一個新陣列來保存
deleteCount專案:deletedItems。 - 將元素
this從 index復制start到start deleteCountintodeletedItems。 this從start deleteCount到this.length向上復制元素以填補已洗掉專案的空白。- 縮小
length到this.length - deleteCount。
在 TypeScript 中,類似這樣的內容(忽略對否定引數的處理):
function splice<T>( this: T[], start: int, deleteCount: int ): T[] {
const removedItems: T[] = [];
const tailIdx = start deleteCount;
for( let i = start; i < tailIdx; i ) {
removedItems.push( this[i] );
}
for( let i = tailIdx, f = start; i < this.length; i , f ) {
this[i] = this[f];
}
this.length = this.length - deleteCount;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463140.html
標籤:javascript 数组 算法
上一篇:如何在沒有無限回圈的情況下在Neo4j的有向圖中找到連接到某些節點的所有節點?
下一篇:laravel中的查詢結果
