【问题标题】:JavaScript array and object mappingJavaScript 数组和对象映射
【发布时间】:2021-03-04 17:01:47
【问题描述】:

我有两个 javascript 变量

1 一个名为 categories 的数组:

["Casual & Fashion", "Jackets", "PPE & Safety Equipment", "Sports & Leisure", "Workwear", "Accessories"]

2 一个名为 result 的对象数组:

  [
    {field: "Workwear", cost: 1.3, cost_p2: 0, cost_diff: -1.3, revenue: 2.6},
    {field: "Hide", cost: 2.8, cost_p2: 0, cost_diff: -2.8, revenue: 5.6},
    {field: "Accessories", cost: 0, cost_p2: 3.1, cost_diff: 3.1, revenue: 10},
    {field: "Safety boots", cost: 24.95, cost_p2: 0, cost_diff: -24.95, revenue: 91},
    {field: "Safety Shoes", cost: 13.9, cost_p2: 0, cost_diff: -13.9, revenue: 27.8},
    {field: "Shorts", cost: 7.45, cost_p2: 0, cost_diff: -7.45, revenue: 14.9},
    {field: "Soft Shell", cost: 17.3, cost_p2: 17.3, cost_diff: 0, revenue: 31.92}
  ]

现在,如您所见,“workwear”和“accessories”同时出现,所以我需要我的最终数组看起来像这样(基于原始类别):

[
    {"Casual & Fashion": 0}, 
    {"Jackets": 0}, 
    {"PPE & Safety Equipment": 0}, 
    {"Sports & Leisure": 0}, 
    {"Workwear": 2.6}, 
    {"Accessories": 10}
  ]

只取匹配的“字段”值和相关的“收入”值

我可以用语言表达逻辑,但语法正在扩展我的能力。

任何帮助表示赞赏。谢谢

【问题讨论】:

    标签: javascript arrays maps javascript-objects


    【解决方案1】:

    是的,有 2 个循环,mapfind

    const categories = ["A", "B", "C", "D"];
    const result = [{"A" : 3}, {"D" : 7}];
    
    const final = categories.map(category => {
      const resultItem = result.find(item => category in item);
      return resultItem ?? { [category]: 0 };
    });
    
    console.log(final);
    // [
    //  0: { A: 3 },
    //  1: { B: 0 },
    //  2: { C: 0 },
    //  3: { D: 7 }
    // ]
    

    回答,原问题措辞改变后:

    const final = categories.map(category => {
      const resultItem = result.find(item => item.field === category);
      return { [category]: resultItem ? resultItem.revenue : 0 };
    });
    
    console.log(final);
    // [
    //  0: {Casual & Fashion: 0},
    //  1: {Jackets: 0},
    //  2: {PPE & Safety Equipment: 0},
    //  3: {Sports & Leisure: 0},
    //  4: {Workwear: 2.6},
    //  5: {Accessories: 10}
    // ]
    

    而且这段代码也经过测试。

    【讨论】:

      【解决方案2】:

      我们只是以简单的方式做到了

           let arr=["Casual & Fashion", "Jackets", "PPE & Safety Equipment", "Sports & Leisure", "Workwear", "Accessories"];
                  
                  let dataArr=[
                      {field: "Workwear", cost: 1.3, cost_p2: 0, cost_diff: -1.3, revenue: 2.6},
                      {field: "Hide", cost: 2.8, cost_p2: 0, cost_diff: -2.8, revenue: 5.6},
                      {field: "Accessories", cost: 0, cost_p2: 3.1, cost_diff: 3.1, revenue: 10},
                      {field: "Safety boots", cost: 24.95, cost_p2: 0, cost_diff: -24.95, revenue: 91},
                      {field: "Safety Shoes", cost: 13.9, cost_p2: 0, cost_diff: -13.9, revenue: 27.8},
                      {field: "Shorts", cost: 7.45, cost_p2: 0, cost_diff: -7.45, revenue: 14.9},
                      {field: "Soft Shell", cost: 17.3, cost_p2: 17.3, cost_diff: 0, revenue: 31.92}
                  ];
                  
                const resultArr=arr.map((itemName)=>{
                  const result=dataArr.find(({field})=>field===itemName)
                  return itemName===result?.field ?
                  {[itemName]:parseFloat(`${result.revenue}`)}: {[itemName]:0};
               })
          console.log(resultArr);

      在这种情况下,“工作服”、“配饰”有不同的收入值,如果我想获得所有项目的总收入值(我只是为一些遇到这种情况的人添加这个答案)

        let arr=["Casual & Fashion", "Jackets", "PPE & Safety Equipment",         "Sports & Leisure", "Workwear", "Accessories"];
      
               let dataArr=[
                      {field: "Workwear", cost: 1.3, cost_p2: 0, cost_diff: -1.3, revenue: 2.6},
                      {field: "Hide", cost: 2.8, cost_p2: 0, cost_diff: -2.8, revenue: 5.6},
                      {field: "Accessories", cost: 0, cost_p2: 3.1, cost_diff: 3.1, revenue: 10},
                      {field: "Safety boots", cost: 24.95, cost_p2: 0, cost_diff: -24.95, revenue: 91},
                      {field: "Safety Shoes", cost: 13.9, cost_p2: 0, cost_diff: -13.9, revenue: 27.8},
                      {field: "Shorts", cost: 7.45, cost_p2: 0, cost_diff: -7.45, revenue: 14.9},
                      {field: "Soft Shell", cost: 17.3, cost_p2: 17.3, cost_diff: 0, revenue: 31.92} ,
                      {field: "Accessories", cost: 0, cost_p2: 3.1, cost_diff: 3.1, revenue: 5},
                      {field: "Workwear", cost: 1.3, cost_p2: 0, cost_diff: -1.3, revenue: 3.6},
                  ];
             const resultArr=arr.map((itemName)=>{
                const result=dataArr.filter(({field})=>field===itemName);
                if(result?.length > 0){
                  return  {[itemName]:result.reduce((acc,c)=>acc+c.revenue,0)}
                }
                return  {[itemName]:0}
          });
          console.log(resultArr)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-09
        • 1970-01-01
        • 2022-01-23
        • 2021-01-30
        • 2023-03-18
        • 2020-11-19
        • 2021-12-15
        • 2018-01-28
        相关资源
        最近更新 更多