【问题标题】:How do I solve this task in javascript? [duplicate]如何在 javascript 中解决此任务? [复制]
【发布时间】:2021-04-29 19:16:22
【问题描述】:

我有一个 json 文件,其中包含如下啤酒类型:

  {
    "type": "Unifiltered",
    "name": "Heineken Unfiltered",
    "id": "XY",
    "brand": "Heineken",
    "price": "1250",
    "alcohol": "0.04",
    "ingredients": [
      {
        "id": "XY2",
        "ratio": "0.15",
        "name": "salt"
      },
      {
        "id": "XY3",
        "ratio": "0.00",
        "name": "sugar"
      },
      {
        "id": "XY4",
        "ratio": "0.35",
        "name": "barley"
      }
    ],
    "isCan": false
  },

我的任务是按品牌对啤酒进行分组:

我的朋友有一份他的酒吧里所有啤酒的清单,但那是一团糟。 他希望看到按品牌分组的啤酒。 我的朋友还告诉你,该函数应该返回一个 Brand > 对象数组,其中包含该品牌的 Beers 数组。

例子:

[{brand: Heineken, beers: [{...}, ...]}]"

【问题讨论】:

  • reduce() 和 Object.values 听起来像一个家庭作业,所以不会给你解决方案。玩得开心。
  • 欢迎来到 StackOverflow。您最初的问题主题说您对编程感兴趣。要求某人解决任务会让您看起来完全不感兴趣 编写代码 - 如果您无法让它工作,请回来询问具体问题。
  • 你知道从哪里开始吗?如果是这样,请edit您的问题并告诉我们您的想法并向我们展示您拥有的任何代码。如果不是,我认为 Stack Overflow 不是一个好去处。我们可以帮助您对您已经编写的代码进行最后润色,但我们无法从零开始教您一切。
  • 是的,这就像一个家庭作业,但如果你帮我完成这个,我可以做下一个任务,但我不知道如何开始

标签: javascript arrays json sorting group-by


【解决方案1】:

const beers = [{
    "type": "Unifiltered",
    "name": "Heineken Unfiltered",
    "id": "XY",
    "brand": "Heineken",
    "price": "1250",
    "alcohol": "0.04",
    "ingredients": [
      {
        "id": "XY2",
        "ratio": "0.15",
        "name": "salt"
      },
      {
        "id": "XY3",
        "ratio": "0.00",
        "name": "sugar"
      },
      {
        "id": "XY4",
        "ratio": "0.35",
        "name": "barley"
      }
    ],
    "isCan": false
  },
{
    "type": "type",
    "name": "name",
    "id": "XY",
    "brand": "EFES",
    "price": "1250",
    "alcohol": "0.04",
    "ingredients": [
      {
        "id": "XY2",
        "ratio": "0.15",
        "name": "salt"
      },
      {
        "id": "XY3",
        "ratio": "0.00",
        "name": "sugar"
      },
      {
        "id": "XY4",
        "ratio": "0.35",
        "name": "barley"
      }
    ],
    "isCan": false
  },
{
    "type": "type3",
    "name": "name2",
    "id": "XY",
    "brand": "EFES",
    "price": "1250",
    "alcohol": "0.04",
    "ingredients": [
      {
        "id": "XY2",
        "ratio": "0.15",
        "name": "salt"
      },
      {
        "id": "XY3",
        "ratio": "0.00",
        "name": "sugar"
      },
      {
        "id": "XY4",
        "ratio": "0.35",
        "name": "barley"
      }
    ],
    "isCan": false
  }];

var group = beers.reduce((r, a) => {
 r[a. brand] = [...r[a. brand] || [], a];
 return r;
}, {});

console.log("group", group);

我认为它已经回答了here

let group = beers.reduce((r, a) => {
 r[a. brand] = [...r[a. brand] || [], a];
 return r;
}, {});
console.log("group", group);

【讨论】:

  • 我怎样才能实现它基于长json文件工作?
  • 我添加了一个代码 sn-p
【解决方案2】:

以易于阅读的格式编写,使用array.forEach() 代替速记函数:

let beers = [{
  "type": "Unifiltered",
  "name": "Heineken Unfiltered",
  "id": "XY",
  "brand": "Heineken",
  "price": "1250",
  "alcohol": "0.04",
  "ingredients": [
    {
      "id": "XY2",
      "ratio": "0.15",
      "name": "salt"
    },
    {
      "id": "XY3",
      "ratio": "0.00",
      "name": "sugar"
    },
    {
      "id": "XY4",
      "ratio": "0.35",
      "name": "barley"
    }
  ],
  "isCan": false
}];

let brands = [];

// Loop over all beers
beers.forEach((beer) => {
  // Try to find beer brand in existing list of brand
  let brand = brands.filter((brand) => brand.brand === beer.brand)[0];
  
  if(brand) {
    // If we find it, push the beer onto the beer property
    brand.beers.push(beer);
  } else {
    // If we don't find it, create a new brand and push it onto brands
    brand = {
      brand: beer.brand,
      beers: [beer]
    }
    brands.push(brand);
  }
});


console.log(brands);

【讨论】:

    【解决方案3】:

    我认为Grouping JSON by values 很有用。使用 group_by 函数,然后它只是清理答案以获得您需要的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-11
      • 2021-02-02
      • 2020-01-19
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      相关资源
      最近更新 更多