如何使用不同的方法在 JavaScript 中添加兩個(gè)向量
本篇文章將介紹如何使用不同的方法在 JavaScript 中添加兩個(gè)向量。
在 JavaScript 中使用 for 循環(huán)添加向量類(lèi)
您可以使用 for 循環(huán)在 JavaScript 中添加兩個(gè)向量。 同時(shí),向量應(yīng)該是 JavaScript 數(shù)組。
定義一個(gè)構(gòu)造函數(shù),它將執(zhí)行加法并返回結(jié)果以開(kāi)始。 最好將加法函數(shù)與構(gòu)造函數(shù)分開(kāi)編寫(xiě),以使代碼干凈并可在其他項(xiàng)目中重用。
加法函數(shù)應(yīng)該起作用,以便第一個(gè)向量可以在第二個(gè)向量上調(diào)用它。
因此,第一個(gè)向量是調(diào)用者,第二個(gè)是被調(diào)用者。 因此,加法函數(shù)應(yīng)按如下方式工作:
- 確保參數(shù)是相同長(zhǎng)度的數(shù)組。 參數(shù)是第一個(gè)向量(調(diào)用者)和第二個(gè)數(shù)組(被調(diào)用者)。
- 構(gòu)造一個(gè)空數(shù)組來(lái)存儲(chǔ)向量加法的最終結(jié)果。
- 循環(huán)調(diào)用者數(shù)組。
- 使用循環(huán)索引添加調(diào)用方數(shù)組和被調(diào)用方數(shù)組元素。
- 將結(jié)果推入步驟 1 創(chuàng)建的空數(shù)組。因此,它不再為空,因?yàn)樗哂屑臃ǖ慕Y(jié)果。
- 使用新數(shù)組返回構(gòu)造函數(shù)的新實(shí)例。
- 如果在此過(guò)程中出現(xiàn)問(wèn)題,請(qǐng)返回錯(cuò)誤。
下面的代碼是這些步驟的實(shí)現(xiàn)。 我們實(shí)施了額外的檢查,以確保用戶(hù)傳遞正確的矢量值。
我們添加了兩個(gè)向量來(lái)測(cè)試向量加法并將結(jié)果記錄到 Web 瀏覽器的控制臺(tái)。
代碼:
function Vector(arg) { this.array = arg; this.add = add; } function add(called_array) { if (Array.isArray(this.array) && Array.isArray(called_array.array)) { if (this.array.length === called_array.array.length) { let result = []; for (let i = 0; i < this.array.length; i++) { if (typeof(this.array[i]) == "number" && typeof(called_array.array[i]) == "number") { result.push(this.array[i] + called_array.array[i]); } else { result.push("Invalid vector value"); } } return new Vector(result); } else { return new Vector("The vectors are not the same length."); } } else { return new Vector("One of your arguments or both of them is not an array."); } } let caller_array = new Vector([3,5,7]); let called_array = new Vector ([5,2,9]); console.log(caller_array.add(called_array).array);
輸出:
Array(3) [ 8, 7, 16 ]
在 JavaScript 中使用 Array.proyotype.map() 添加向量類(lèi)
使用 Array.prototype.map()
添加向量需要向量本身是 JavaScript 數(shù)組。 與上一節(jié)類(lèi)似,第一個(gè)數(shù)組應(yīng)該是調(diào)用者。
這意味著我們將定義一個(gè)有助于添加的構(gòu)造函數(shù)。 但是,我們不會(huì)將 add()
函數(shù)與構(gòu)造函數(shù)分開(kāi)定義。
這一次,我們將使 add()
函數(shù)成為構(gòu)造函數(shù)原型的一部分。
add()
函數(shù)將返回構(gòu)造函數(shù)的新實(shí)例。 然而,這個(gè)新實(shí)例的參數(shù)是調(diào)用數(shù)組在被調(diào)用數(shù)組上使用自定義函數(shù) Array.prototype.map()
的結(jié)果。
自定義函數(shù)執(zhí)行數(shù)組的添加。
我們使用 Array.prototype.map()
在下面的代碼中添加向量。 在此過(guò)程中,我們檢查了參數(shù)是否為相同長(zhǎng)度的數(shù)組。
除此之外,代碼會(huì)拋出 TypeError。
代碼:
var Vector = function (arg){ this.array = arg; }; Vector.prototype.add = function(called_array){ called_array = called_array.array; let caller_array = this.array; if (Array.isArray(caller_array) && Array.isArray(called_array)) { if (caller_array.length !== called_array.length) { throw new TypeError("Vectors have different length"); } } else { return new Vector("One of your arguments or both of them is not an array."); } return new Vector(caller_array.map( function (caller_array_element, called_array_element) { if (typeof(caller_array_element) == "number" && typeof(called_array_element) == "number") { return caller_array_element + called_array[called_array_element]; } else { return 'Invalid Vector value'; } })); } let caller_array = new Vector([9,8,5]); let called_array = new Vector ([2,5,8]); console.log(caller_array.add(called_array).array);
輸出:
Array(3) [ 11, 13, 13 ]
在 JavaScript 中使用 ES6 類(lèi)添加向量類(lèi)
使用 ES6 類(lèi)添加向量背后的基本邏輯是自定義 add()
函數(shù),它使用 for 循環(huán)添加向量并返回 ES6 類(lèi)的新實(shí)例。 在添加向量之前,請(qǐng)確保將它們存儲(chǔ)在一個(gè)數(shù)組中。
之后,第一個(gè)數(shù)組應(yīng)該在第二個(gè)數(shù)組上調(diào)用 add()
函數(shù)。
我們?cè)谝韵麓a中有一個(gè) ES6 類(lèi),它使用 add()
函數(shù)添加兩個(gè)數(shù)組。 添加后,它將添加的結(jié)果傳遞給 ES6 類(lèi)的新實(shí)例。
代碼:
class Vector { constructor(arr) { this.arr = arr; } add(called_array) { let caller_array = called_array.arr; if (Array.isArray(this.arr) && Array.isArray(caller_array)) { if (this.arr.length === caller_array.length) { let result = []; for (let key in this.arr) { if (typeof(this.arr[key]) == "number" && typeof(caller_array[key]) == "number") { result[key] = this.arr[key] + caller_array[key]; } else { result[key] = "Invalid Vector Value."; } } return new Vector(result); } else { return new Vector('The vectors are not the same length.'); } } else { return new Vector("One of your arguments or both of them is not an array."); } } } let caller_array = new Vector([3,6,0]); let called_array = new Vector ([1,5,0]); console.log(caller_array.add(called_array).arr);
輸出:
Array(3) [ 4, 11, 0 ]
通過(guò)在 JavaScript 中擴(kuò)展 Array 類(lèi)來(lái)添加 Vector 類(lèi)
您可以創(chuàng)建一個(gè)擴(kuò)展 JavaScript 原生 Array 類(lèi)的矢量類(lèi)。 因此,向量類(lèi)應(yīng)該實(shí)現(xiàn)一個(gè)函數(shù)來(lái)添加向量。
第一個(gè)向量可以調(diào)用第二個(gè)向量上的函數(shù)。 結(jié)果,您將得到加法的結(jié)果。
在下面的代碼中,我們擴(kuò)展了原生 Array 類(lèi)并使用 map()
函數(shù)遍歷調(diào)用的數(shù)組。 然后,我們可以將它的元素添加到調(diào)用者數(shù)組中并產(chǎn)生一個(gè)結(jié)果。
代碼:
class Vector extends Array { add(called_array) { if (this.length == called_array.length) { return this.map((caller_array_element, called_array_element) => { if (typeof(caller_array_element) == "number" && typeof(called_array_element) == "number"){ return caller_array_element + called_array[called_array_element]; } else { return 'Invalid Vector value'; }; }) } else { return "The vectors are not the same length."; } } } let caller_array = new Vector(1, 2, 4); let called_array = new Vector(3, 9, 20); console.log(caller_array.add(called_array));
輸出:
Array(3) [ 4, 11, 24 ]
到此這篇關(guān)于如何在 JavaScript 中添加向量(Vector)類(lèi)的文章就介紹到這了,更多相關(guān)js 添加向量(Vector)類(lèi)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
移動(dòng)端(微信等使用vConsole調(diào)試console的方法
這篇文章主要介紹了移動(dòng)端(微信等使用vConsole調(diào)試console的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03JS實(shí)現(xiàn)簡(jiǎn)單獲取最近7天和最近3天日期的方法
這篇文章主要介紹了JS實(shí)現(xiàn)簡(jiǎn)單獲取最近7天和最近3天日期的方法,涉及javascript針對(duì)日期與時(shí)間的相關(guān)數(shù)值運(yùn)算與轉(zhuǎn)換操作技巧,需要的朋友可以參考下2018-04-04Javascript實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊冒泡特效
這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊冒泡特效,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-12-12由JavaScript技術(shù)實(shí)現(xiàn)的web小游戲(不含網(wǎng)游)
伴隨Ajax與網(wǎng)頁(yè)游戲的崛起,曾幾何時(shí)JavaScript也成了游戲開(kāi)發(fā)時(shí)可供選擇的技術(shù)之一,文本 僅列舉數(shù)項(xiàng)由JavaScript技術(shù)實(shí)現(xiàn)的web小游戲(不含網(wǎng)游),聊作參考之用。2010-06-06javascript定時(shí)變換圖片實(shí)例代碼
javascript定時(shí)變換圖片實(shí)例代碼,需要的朋友可以參考一下2013-03-03JavaScript中將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)的技巧
在JavaScript中,parseFloat是一個(gè)內(nèi)置函數(shù),用于將一個(gè)字符串解析成浮點(diǎn)數(shù),這個(gè)方法對(duì)于處理用戶(hù)輸入、從文本文件讀取數(shù)據(jù)或者在Web API中獲取數(shù)值尤其重要,本文將詳細(xì)介紹parseFloat的工作原理、使用方法以及通過(guò)代碼案例展示其在實(shí)際開(kāi)發(fā)中的應(yīng)用2025-02-02