[英]Creating a 2D array from a 1D array in JavaScript
我有以下數組:
let numbers = [10, 20, 20, 10, 10, 30, 50, 10, 20];
我創建了一個沒有重復值的新數組:
let counter = [...new Set(array)];
//Output: [ 10, 20, 30, 50 ]
我想將計數器數組實例化為 2D/嵌套數組,使其看起來像這樣:
//counter output: [[10,4][20, 3][30, 1][50,1]]
做到這一點的最佳方法是什么? 數字數組可能有各種元素,因此計數器數組中的元素數量可能會有所不同。
此答案適用於原始問題(如何從 Set 創建[[10, 0],[20, 0],[30, 0],[50, 0]]
數組):
使用Array.from()
創建一個數組對,而不是傳播 Set:
const numbers = [10, 20, 20, 10, 10, 30, 50, 10, 20]; const counter = Array.from(new Set(numbers), v => [v, 0]); console.log(counter);
假設您實際上希望第二個子數組索引表示每個數字的出現次數( ed:confirmed now ),您可以將計數收集到Map
,然后將其轉換為數組
let numbers = [10, 20, 20, 10, 10, 30, 50, 10, 20]; const counter = [...numbers.reduce((map, n) => map.set(n, (map.get(n) ?? 0) + 1), new Map())] console.info(JSON.stringify(counter)) // stringifying so it's all on one line
數組轉換有效,因為Map
支持常見的條目格式
[ [ key, value ], [ key, value ], ... ]
並使用擴展語法將其隱式轉換為條目數組。
一種方法是采用您已經使用過的想法並映射這些值,返回帶有該值和附加零的新數組。
let numbers = [...new Set([10, 20, 20, 10, 10, 30, 50, 10, 20])].map(value=>[value,0]);
您可以將原始數組轉換為對象(哈希圖)以跟蹤計數。 然后將其轉換為Object.entries()
數組。
const numbers = [10, 20, 20, 10, 10, 30, 50, 10, 20]; let obj = {}; numbers.forEach(n => { obj[n] = obj[n] || 0; obj[n]++; }); const counter = Object.entries(obj).map(e => [+e[0], e[1]]); console.log(counter);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.