您可以在 repo Github 上找到這篇文章中的所有程式碼。
陣列相關的挑戰
陣列
/** * @return {Array} */ function arrayOf(arr) { return [].slice.call(arguments); } // Usage example const array1 = [1, 2, 3]; const array2 = [4, 5, 6]; const combinedArray = arrayOf(array1, array2); console.log(combinedArray); // => [ [ 1, 2, 3 ], [ 4, 5, 6 ] ]
數組到樹
/** * @param {Array} arr * @return {Array} */ function arrToTree(arr) { const tree = []; const hashmap = new Map(); // create nodes and store references arr.forEach((item) => { hashmap[item.id] = { id: item.id, name: item.name, children: [], }; }); // build the tree arr.forEach((item) => { if (item.parentId === null) { tree.push(hashmap[item.id]); } else { hashmap[item.parentId].children.push(hashmap[item.id]); } }); return tree; } // Usage example const flatArray = [ { id: 1, name: "Node 1", parentId: null }, { id: 2, name: "Node 1.1", parentId: 1 }, { id: 3, name: "Node 1.2", parentId: 1 }, { id: 4, name: "Node 1.1.1", parentId: 2 }, { id: 5, name: "Node 2", parentId: null }, { id: 6, name: "Node 2.1", parentId: 5 }, { id: 7, name: "Node 2.2", parentId: 5 }, ]; const tree = arrToTree(flatArray); console.log(tree); // => [{ id: 1, name: 'Node 1', children: [ [Object], [Object] ] }, { id: 5, name: 'Node 2', children: [ [Object], [Object] ] }]
數組包裝器
class ArrayWrapper { constructor(arr) { this._arr = arr; } valueOf() { return this._arr.reduce((sum, num) => sum + num, 0); } toString() { return `[${this._arr.join(",")}]`; } } // Usage example const obj1 = new ArrayWrapper([1, 2]); const obj2 = new ArrayWrapper([3, 4]); console.log(obj1 + obj2); // => 10 console.log(String(obj1)); // => [1,2]
類別數組到數組
/** * @param {any} arrayLike * @return {Array} */ function arrayLikeToArray(arrayLike) { return Array.from(arrayLike); } // Usage example const arrayLike = { 0: "a", 1: "b", 2: "c", length: 3, }; console.log(arrayLikeToArray(arrayLike)); // => ['a', 'b', 'c']
區塊
/** * @template T * @param {Array<t>} arr The array to process. * @param {number} [size=1] The length of each chunk. * @returns {Array<array>>} The new array of chunks. */ function chunk(arr, size = 1) { if (!Array.isArray(arr) || size [['a'], ['b'], ['c'], ['d']] console.log(chunk([1, 2, 3, 4], 2)); // => [[1, 2], [3, 4]] console.log(chunk([1, 2, 3, 4], 3)); // => [[1, 2, 3], [4]] </array></t>
組合
/** * @param {array} arrs * @return {array} */ function generateCombinations(arrs) { const result = []; function backtrack(start, current) { if (start === arrs.length) { result.push(current.join('')); return; } for (const item of arrs[start]) { current.push(item); backtrack(start + 1, current); current.pop(); } } backtrack(0, []); return result; } // Usage example const nestedArray = [['a', 'b'], [1, 2], [3, 4]]; console.log(generateCombinations(nestedArray)); // => ['a13', 'a14', 'a23', 'a24', 'b13', 'b14', 'b23', 'b24']
不同之處
/** * @param {Array} array * @param {Array} values * @return {Array} */ function difference(arr, values) { const newArray = []; const valueSet = new Set(values); for (let i = 0; i [1] console.log(difference([1, 2, 3, 4], [2, 3, 1])); // => [4] console.log(difference([1, 2, 3], [2, 3, 1, 4])); // => [] console.log(difference([1, , 3], [1])); // => [3]
立即下降
/** * @param {Array} array * @param {Function} predicate * @return {Array} */ function dropRightWhile(arr, predicate) { let index = arr.length - 1; while (index >= 0 && predicate(arr[index], index, arr)) { index -= 1; } return arr.slice(0, index + 1); } // Usage example console.log(dropRightWhile([1, 2, 3, 4, 5], (value) => value > 3)); // => [1, 2, 3] console.log(dropRightWhile([1, 2, 3], (value) => value [] console.log(dropRightWhile([1, 2, 3, 4, 5], (value) => value > 6)); // => [1, 2, 3, 4, 5]
掉落時
/** * @param {Array} array * @param {Function} predicate * @return {Array} */ function dropWhile(arr, predicate) { let index = 0; while (index value [3, 4, 5] dropWhile([1, 2, 3], (value) => value []
展平
/** * @param {Array} value * @return {Array} */ function flatten(arr) { const newArray = []; const copy = [...arr]; while (copy.length) { const item = copy.shift(); if (Array.isArray(item)) { copy.unshift(...item); } else { newArray.push(item); } } return newArray; } // Usage example console.log(flatten([1, 2, 3])); // [1, 2, 3] // Inner arrays are flattened into a single level. console.log(flatten([1, [2, 3]])); // [1, 2, 3] console.log( flatten([ [1, 2], [3, 4], ]) ); // [1, 2, 3, 4] // Flattens recursively. console.log(flatten([1, [2, [3, [4, [5]]]]])); // [1, 2, 3, 4, 5]
產生唯一的隨機數組
/** * @param {number} range * @param {number} outputCount * @return {Array} */ function generateUniqueRandomArray(range, outputCount) { const arr = Array.from({ length: range }, (_, i) => i + 1); const result = []; for (let i = 0; i [3, 7, 1, 9, 5]
交叉點
/** * @param {Function} iteratee * @param {Array[]} arrays * @returns {Array} */ function intersectionBy(iteratee, ...arrs) { if (!arrs.length) { return []; } const mappedArrs = arrs.map((arr) => arr.map(iteratee)); let intersectedValues = mappedArrs[0].filter((value) => { return mappedArrs.every((mappedArr) => mappedArr.includes(value)); }); intersectedValues = intersectedValues.filter((value, index, self) => { return self.indexOf(value) === index; }); return intersectedValues.map((value) => { const index = mappedArrs[0].indexOf(value); return arrs[0][index]; }); } // Usage example const result = intersectionBy(Math.floor, [1.2, 2.4], [2.5, 3.6]); // => [2.4] console.log(result); // => [2.4] const result2 = intersectionBy( (str) => str.toLowerCase(), ["apple", "banana", "ORANGE", "orange"], ["Apple", "Banana", "Orange"] ); console.log(result2); // => ['apple', 'banana', 'ORANGE']
路口
/** * @param {Array<unknown>[]} arrays - The arrays to find the intersection of. * @returns {Array<unknown>} - An array containing the elements common to all input arrays. */ function intersectArrays(...arrs) { if (!arrs.length) { return []; } const set = new Set(arrs[0]); for (let i = 1; i { if (!arrs[i].includes(value)) { set.delete(value); } }); } return Array.from(set); } // Usage example console.log(intersectArrays([1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 6])); // => [3, 4] </unknown></unknown>
意思是
/** * @param {Array} array * @return {Number} */ function mean(arr) { return arr.reduce((sum, number) => sum + number, 0) / arr.length; } // Usage example console.log(mean([1, 2, 3])); // => 2 console.log(mean([1, 2, 3, 4, 5])); // => 3
刪除重複項
/** * @param {*} arr */ function removeDuplicates(arr) { return Array.from(new Set(arr)); } // Usage example const inputArray = [1, 2, 3, 2, 1, 4, 5, 6, 5, 4]; const outputArray = removeDuplicates(inputArray); console.log(outputArray); // => [1, 2, 3, 4, 5, 6]
隨機播放
/** * @param {any[]} arr * @returns {void} */ function shuffle(arr) { if (arr.length [*, *, *, *]
排序方式
/** * @param {Array} arr * @param {Function} fn * @return {Array} */ function sortBy(arr, fn) { return arr.sort((a, b) => fn(a) - fn(b)); } // Usage example console.log(sortBy([5, 4, 1, 2, 3], (x) => x)); // => [1, 2, 3, 4, 5]
樹到數組
/** * @param {Array} tree * @param {number} parentId * @return {Array} */ function treeToArr(tree, parentId = null) { const arr = []; tree.forEach((node) => { const { id, name } = node; arr.push({ id, name, parentId }); // recursive if (node.children && node.children.length > 0) { arr.push(...treeToArr(node.children, id)); } }); return arr; } // Usage example const tree = [ { id: 1, name: "Node 1", children: [ { id: 2, name: "Node 1.1", children: [ { id: 4, name: "Node 1.1.1", children: [], }, ], }, { id: 3, name: "Node 1.2", children: [], }, ], }, { id: 5, name: "Node 2", children: [ { id: 6, name: "Node 2.1", children: [], }, { id: 7, name: "Node 2.2", children: [], }, ], }, ]; const flatArray = treeToArr(tree); console.log(flatArray); /* [ { id: 1, name: 'Node 1', parentId: null }, { id: 2, name: 'Node 1.1', parentId: 1 }, { id: 4, name: 'Node 1.1.1', parentId: 2 }, { id: 3, name: 'Node 1.2', parentId: 1 }, { id: 5, name: 'Node 2', parentId: null }, { id: 6, name: 'Node 2.1', parentId: 5 }, { id: 7, name: 'Node 2.2', parentId: 5 } ] */
參考
- 2695。數組包裝器 - LeetCode
- 2677。區塊數組 - LeetCode
- 2724。排序依據 - LeetCode
- 2625。展平深度嵌套數組 - LeetCode
- 131。實作 _.chunk() - BFE.dev
- 8.你能 shuffle() 一個陣列嗎? - BFE.dev
- 384。隨機排列數組 - LeetCode
- 138。兩個排序數組的交集 - BFE.dev
- 167。未排序數組的交集 - BFE.dev
- 66。從陣列中刪除重複項 - BFE.dev
以上是陣列 - JavaScript 挑戰的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript核心數據類型在瀏覽器和Node.js中一致,但處理方式和額外類型有所不同。 1)全局對像在瀏覽器中為window,在Node.js中為global。 2)Node.js獨有Buffer對象,用於處理二進制數據。 3)性能和時間處理在兩者間也有差異,需根據環境調整代碼。

JavaScriptusestwotypesofcomments:single-line(//)andmulti-line(//).1)Use//forquicknotesorsingle-lineexplanations.2)Use//forlongerexplanationsorcommentingoutblocksofcode.Commentsshouldexplainthe'why',notthe'what',andbeplacedabovetherelevantcodeforclari

Python和JavaScript的主要區別在於類型系統和應用場景。 1.Python使用動態類型,適合科學計算和數據分析。 2.JavaScript採用弱類型,廣泛用於前端和全棧開發。兩者在異步編程和性能優化上各有優勢,選擇時應根據項目需求決定。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3漢化版
中文版,非常好用

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中