簡體   English   中英

變換 Javascript 陣列

[英]Transforming Javascript Array

我不確定轉換此 JS 數組的最佳方法是什么。

我有一個結構如下的數組(可能包含多個元素):

let arr1 = [{amount: '10', quantity: 2, id: '123'}, {....}]

但我需要把它轉換成一個結構像的數組

let arr2 = [{value: '10'}, {value: '10'}]

本質上是根據數組 1 中的數量將新對象添加到數組中。

我在想基本的 for 循環,但它似乎變得有點混亂。 JS中有一種簡單的方法可以做到這一點嗎? 是否有某種內置 function 等?

您可以使用flatMap輕松獲得結果。

首先,您可以創建一個以元素數量為quantity的臨時數組,然后在臨時數組上創建map以獲取其中包含屬性amount的 object。

 let arr1 = [ { amount: "10", quantity: 2, id: "123" }, { amount: "30", quantity: 5, id: "123" }, ]; const result = arr1.flatMap((obj) => { const { amount, quantity } = obj; return Array(quantity).fill(0).map((x) => ({ amount })); }); console.log(result);

您還可以使上面的代碼片段簡潔

const result = arr1.flatMap(({ quantity, amount }) => Array(quantity).fill(0).map((x) => ({ amount })));

 let arr1 = [ { amount: "10", quantity: 2, id: "123" }, { amount: "30", quantity: 5, id: "123" }, ]; const result = arr1.flatMap(({ quantity, amount }) => Array(quantity).fill(0).map((x) => ({ amount })) ); console.log(result);

您也可以使用reduce來執行此操作,並使用手動 for 循環到 append 正確的條目數。

let arr1 = [{amount: '10', quantity: 2, id: '123'}];

const result = arr1.reduce((accum, v) => {
    for (let i = 0; i < v.quantity; i++) {
        accum.push({value: v.amount});
    }
    return accum;
} , []);

flatMap相比,這可能會稍微提高性能,因為它不會創建任何臨時對象。

我在想基本的 for 循環,但似乎有點亂

你只需要一個簡單for和一個while循環:

 const input = [{amount: '10', quantity: 2, id: '123'}], output = [] for (let { amount, quantity } of input) while (quantity--) output.push({ value: amount }) console.log(output)


您可以使用Array.from()創建o.quantity數量的對象。 使用flatMap為輸入數組中的每個項目獲取一個平面數組

const output = input.flatMap(o => 
  Array.from({ length: o.quantity }, _ => ({ value: o.amount }) )
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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