簡體   English   中英

僅返回數字並從javascript中的現有數組中刪除字符串?

[英]Returning only numbers and removing strings from existing array in javascript?

我搜索了許多類似的問題,但無法找到這個棘手問題的答案。 我需要一個函數來從數組中刪除所有不是數字的項目。 但是函數應該修改現有數組,而不是創建一個新數組。 我試圖做這樣的事情:

 let array = [1, 'a', 'b', 2];
 array = array.filter(item => typeof item !== "string");
 console.log(array);

 //--> [1, 2]

雖然我得到了正確的結果,但我在額外的點上進行了測試,因為根據MDN ,結果創建了一個具有正確結果的新數組,我被忽略了,也不完全知道。

那么在解決這些問題方面,有沒有人比我更有經驗,從我的想法來看,我試圖用 array.splice 和 for 循環做幾個小時的事情,但幾乎沒有成功。提前謝謝你,很抱歉很長時間開帖。

您可以在反向for循環中使用Array#splice()

因為您正在向后工作,所以您刪除的任何內容都不會影響您移動方向上的任何索引,因為原始元素仍然存在於從0到當前位置

 let array = [1, 'a', 'b', 2]; for (let i = array.length - 1; i >= 0; i--) { if (typeof array[i] === "string") {// modify conditional as needed array.splice(i, 1); } } console.log(array); //--> [1, 2]

您總是可以先嘗試排序,而不是循環。 例如:

 const array = [1, 'a', 'b', '2', 3, 2] // sort into strings after everything else array.sort(a => typeof a === 'string') // splice the string parts away array.splice(array.findIndex(i => typeof i === 'string')) console.log(array) //--> [1, 3, 2]

這是有效的,因為排序功能已經完成,並且基本上說如果第一個比較項是字符串,則將其推回排序中。 這符合您的約束,不太容易出現循環錯誤,並且具有僅調用splice一次的額外好處。

但實際上,為什么你必須改變原始數組? 似乎沒有必要,使用filter會使您的代碼更具可讀性。

您可以使用一個指針和一個檢查指針是否已到達數組末尾的while循環來執行此操作:

 let array = [1, 'a', 'b', 2, 3, 'c', 'd', 3]; let i = 0; while (i < array.length) { if (typeof array[i] === "string") array.splice(i, 1); else i++; } console.log(array);

請注意,如果我們決定splice某些東西,我們不會增加指針。

我建議你使用 while 循環,它將從最后一個元素開始,並在Array.splice()方法的幫助下根據要刪除的元素類型拼接元素。

 let array = [1, 'a', 'b', 2]; let i = array.length; while (i--) { if (typeof array[i] === 'string') { array.splice(i, 1); } } console.log(array);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM