簡體   English   中英

在 JavaScript 中從一維數組創建二維數組

[英]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.

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