簡體   English   中英

JavaScript:將數組簡化為嵌套對象

[英]JavaScript: Reduce an array to nested objects

所以假設我的數組看起來像這樣:

let langArr = [
     ["python", "blue"]
    ,["python", "blue"]
    ,["c++", "red"]
    ,["java", "yellow"]
    ,["javascript", "lime"]
    ,["shell", "green"]
    ,["c++", "red"]
];

我想要的是這樣的:

{
  python: {
    count: 2
    color: "blue"
  }
  c++: {
    count: 2
    color: "red"
  }
  java: {
    count: 1
    color: "yellow"
  }
  and so on...
}

我試過這樣的reduce方法:

let langCount = langArr.reduce((lang, [name, color]) => {
      lang[name] = (lang[name] || 0) + 1;
      lang[color] = 'color';
      return lang;
    }, {});
    console.log(langCount);

但我得到這個輸出:

{
  python: 2
  blue: "color"
  c++: 2
  red: "color"
  java: 1
  yellow: "color"
  and so on...
}

每種語言都需要一個對象。

如果lang[name]falsy ,則此方法將對象作為默認值,例如undefined

圖案

variable = variable || value;

使用邏輯 OR ||

  • 如果variable有一個值,取這個值,
  • 如果variable有一個值, value代替。

 let langArr = [["python", "blue"], ["python", "blue"], ["c++", "red"], ["java", "yellow"], ["javascript", "lime"], ["shell", "green"], ["c++", "red"]], langCount = langArr.reduce((lang, [name, color]) => { lang[name] = lang[name] || { count: 0, color }; lang[name].count++; return lang; }, {}); console.log(langCount);

你可以使用這個:

array.reduce((acc, current) => {
        if(!acc.hasOwnProperty(current[0])){
            acc[current[0]] = {count: 0, color: current[1]};
        }
        acc[current[0]].count += 1;
        return acc;
    }, {});

暫無
暫無

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

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