【leetcode解題日記】2695. 包裝數組 (簡單)

更新於 發佈於 閱讀時間約 4 分鐘

題目說明

創建一個名為 ArrayWrapper 的類,它在其建構函式中接受一個整數陣列作為參數。該類別應具有以下兩個特性:

當使用 + 運算子將兩個該類的實例相加時,結果值為兩個陣列中所有元素的總和。當在實例上調用 String() 函數時,它將傳回一個由逗號分隔的括在方括號中的字串。例如,[1,2,3] 。

解題思路

題目看起來很難懂,我看了評論中其他網友的說明才知道,這和JavaScript中的自動類型轉換機制有關。

  • JavaScript 中的自動類型轉換機制
    • 加號運算符 (+) 與 valueOf(),當使用 + 運算符時:
      • JavaScript 會嘗試將操作數轉換為原始值(primitive value)
      • 在此轉換過程中,會自動調用對象的valueOf() 方法,如果 valueOf() 返回原始值(如數字),則使用該值進行運算
      • 例如,obj1 + obj2; // 10
    • String() 函數與 toString(),當調用 String() 函數時:
      • JavaScript 會嘗試將參數轉換為字串
      • 在此轉換過程中,會調用toString()方法
      • 例如,String(obj); // "[23,98,42,70]" (由逗號分隔的括在方括號中的字串)

簡單來說,當調用 valueOf() 方法時,要將nums中的元素相加,當調用 toString() 方法時,要將nums中的元素重新接成由逗號隔開且由中括號包裹的字串。

var ArrayWrapper = function(nums) {

this.nums = Array.isArray(nums) ? nums : [] // 首先判斷nums是否為陣列
};

ArrayWrapper.prototype.valueOf = function() { // 加號運算符 (+) 相當於調用 valueOf()
return this.nums.reduce((s, n) => s + n, 0)
}

ArrayWrapper.prototype.toString = function() { // String() 函數相當於調用 toString()
return `[${this.nums.join(",")}]`
}

總結

也就是說,當題目說「使用 + 運算符」時,表示需要實現 valueOf() 方法;而「調用 String() 函數」時,則表示需要實現 toString() 方法。這些是 JavaScript 中約定俗成的行為模式。

此外,由於JavaScript 沒有直接的運算符重載,但透過覆寫 valueOf()toString() 方法,可以實現類似功能,使得物件可以參與數學運算,如 obj1 + obj2obj1 > obj2 等。

並且,由於ArrayWrapper 封裝了陣列,因此可以防止外部直接操作內部資料。

在本題目中,可以掌握以下實用技巧

  • Array.isArray() 用於類型檢查
  • reduce() 用於陣列的結合操作
  • 模板字串與 join() 用於字串處理

在寫題目的過程中,除了能夠練習各種演算法的使用,也能夠累積JavaScript的基本知識點,cp值非常高🤩。

留言
avatar-img
留言分享你的想法!
avatar-img
dizzydog的沙龍
1會員
5內容數
親愛的訪客您好!我是 dizzydog,一位熱衷於前端技術的工程師。這個部落格是我的數位筆記本,記錄著我在程式開發路上的各種發現、挑戰與突破。我相信「輸出」是最有效的學習方式,透過清晰地表達所學,不僅能加深自己的理解,也能幫助其他走在相同道路上的開發者。 歡迎您在這裡探索以及交流。
你可能也想看
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
孩子寫功課時瞇眼?小心近視!這款喜光全光譜TIONE⁺光健康智慧檯燈,獲眼科院長推薦,網路好評不斷!全光譜LED、180cm大照明範圍、5段亮度及色溫調整、350度萬向旋轉,讓孩子學習更舒適、保護眼睛!
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
這篇內容,將會講解什麼是資料型態,以及與資料型態相關的知識。包括資料型態的簡介、實數、布林值、 字串、陣列。
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
這篇內容,將會講解什麼是變數,以及與變數相關的知識。包括變數、資料型態、變數賦值、變數的命名規則、變數的作用區域、變數的可重複性、內建變數。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
這一章節介紹了PHP的各種資料型別,包括內建型別如整數、浮點數、布爾值、字符串、數組、對象、空值和資源,並解釋了型別轉換的方式。此外,還討論了自訂型別、元組型別、集合型別、陣列型別和字典型別的實現方法。
Thumbnail
本章節的目的是介紹Java中的運算符,包括算數運算符、比較運算符、賦值運算符、位元運算符以及運算符的優先等級。通過本章節,讀者可以了解到如何在Java中進行基本的數學運算、比較兩個值的大小、將值賦給變數、進行位元運算,以及在複雜表達式中如何正確地理解運算符的優先等級。
Thumbnail
本章節的目的是介紹Java中的運算符,包括算數運算符、比較運算符、賦值運算符、位元運算符以及運算符的優先等級。通過本章節,讀者可以了解到如何在Java中進行基本的數學運算、比較兩個值的大小、將值賦給變數、進行位元運算,以及在複雜表達式中如何正確地理解運算符的優先等級。
Thumbnail
此章節旨在介紹TypeScript中的運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子,以及他們的優先等級。每種運算子都以清晰的解釋和代碼範例進行詳細說明,幫助讀者理解並有效地在自己的程式碼中使用。
Thumbnail
此章節旨在介紹TypeScript中的運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子,以及他們的優先等級。每種運算子都以清晰的解釋和代碼範例進行詳細說明,幫助讀者理解並有效地在自己的程式碼中使用。
Thumbnail
了解這些運算子及其優先等級有助於更好地理解和編寫 JavaScript 代碼
Thumbnail
了解這些運算子及其優先等級有助於更好地理解和編寫 JavaScript 代碼
Thumbnail
在本章節中,我們將學習JavaScript的基本語法,包括如何註解代碼和如何聲明變數。瞭解這些基礎知識對於進一步學習和使用JavaScript來編寫代碼是非常重要的。
Thumbnail
在本章節中,我們將學習JavaScript的基本語法,包括如何註解代碼和如何聲明變數。瞭解這些基礎知識對於進一步學習和使用JavaScript來編寫代碼是非常重要的。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
本文詳細介紹了Python中的各種資料型別,包括整數、字串、清單、元組、集合和字典,並提供了相關的操作範例。此外,還解釋了如何在Python中定義和操作變數,包括如何同時對多個變數進行賦值。
Thumbnail
我們馬上來介紹 LAMBDA 函式的第一個輔助函式 MAKEARRAY!
Thumbnail
我們馬上來介紹 LAMBDA 函式的第一個輔助函式 MAKEARRAY!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News