簡體   English   中英

Javascript 動態 object 類似於 PHP 多維關聯數組

[英]Javascript dynamic object similar to PHP multidimensional associative array

您將如何在 Javascript 中動態添加/更新 object 的屬性?

例如,使用 PHP 的關聯數組,它超級簡單直觀。 例如

$test = [];
foreach ($data as $key => $value) {
    ...
    $test[$year][$month] += $amount;
}

var_dump(json_encode($test));

我可以自動更新或向數組添加新項目。 我會得到類似的東西:

{
  "2018": {
    "5": 1110,
    "6": 690
  },
  "2019": {
    "9": 354,
    "10": 531,
    "12": 567
  },
  "2020": {
    "1": 444,
    "2": 100,
    "4": 200,
    "8": 1431
  }
}

我試過,在 Javascript 沒有成功:

let test = {};
data.forEach(function (item, index) {
    ...
    test[year] = {
        [month]: amount
    }
});

產生類似的東西:

{
  "2018": {
    "2": 1394000
  },
  "2019": {
    "0": 3204000
  },
  "2020": {
    "0": 1475000
  }
}

月份被循環中的最后一個替換。 此外,我還無法弄清楚如何添加到現有金額。

我不想做一堆 ifs 來檢查 object 屬性是否已經存在等。

或者也許我以錯誤的方式接近這個?


編輯:

$datadata的示例,可以有重復的年份和月份。

[
    {
        "amount": 123,
        "year": 2020,
        "month": 5
    },
    {
        "amount": 123,
        "year": 2019,
        "month": 3
    },
    ...
]

下面是一個簡短的示例,說明如何通過循環遍歷數據數組來構建測試 object:

const data = [
    {
        "amount": 10,
        "year": 2020,
        "month": 5
    },
    {
        "amount": 20,
        "year": 2019,
        "month": 5
    },
    {
        "amount": 30,
        "year": 2019,
        "month": 6
    }
]

let test = {};
data.forEach(item => {
  if (!test[item.year]) {
    test[item.year] = {};
  }

  test[item.year][item.month] = item.amount;
});

console.log(test)

這輸出:

{
  2019: {
    5: 20,
    6: 30
  },
  2020: {
    5: 10
  }
}

暫無
暫無

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

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