【问题标题】:How do I create new object after manipulation操作后如何创建新对象
【发布时间】:2021-11-01 11:52:57
【问题描述】:

我有一个 JavaScript 对象,如下面的可用性和保留,这里我需要从可用性中减去数量值。

var availability = {"bike":10,"cycle":3,"car":1};

var reserved ={"cycle":1,"bike":10}

我应该如何得到如下响应?

response = {"bike":0,"cycle":2,"car":1};

【问题讨论】:

    标签: javascript node.js arrays json


    【解决方案1】:

    为什么不是一个简单的 for 循环。

    var availability = { bike: 10, cycle: 3, car: 1 };
    
    var reserved = { cycle: 1, bike: 10 };
    let response = {};
    for (let key in availability) {
      if (reserved[key]) {
        response[key] = availability[key] - reserved[key];
      } else {
        response[key] = availability[key];
      }
    }
    
    console.log(response);
    
    

    输出:

    { bike: 0, cycle: 2, car: 1 }
    

    【讨论】:

      【解决方案2】:

      您可以遍历每个键值对并用reserved 中的对应键减去availability 中的数量。然后使用Object.fromEntries() 创建您的结果对象。

      const availability = { "bike" : 10, "cycle" : 3, "car" : 1 },
            reserved ={ "cycle": 1,"bike": 10 },
            result = Object.fromEntries(Object.entries(availability).map(([key, value]) => [key, value - (reserved[key] ?? 0)]));
      console.log(result);

      【讨论】:

      • 谢谢...我可以像下面这样使用 const availability = { "bike" : 10, "cycle" : 3, "car" : 1 }, reserved ={ "cycle": 1 ,"bike": 10 }, availability = Object.fromEntries(Object.entries(availability).map(([key, value]) => [key, value - (reserved[key] ?? 0)])); console.log(可用性);
      • 您可以将availability 声明为let 变量,然后在console.log() 之前分配availability = result。例如 - 让可用性 = { "bike" : 10, "cycle" : 3, "car" : 1 }, reserved ={ "cycle": 1,"bike": 10 }, result = Object.fromEntries(Object.entries (availability).map(([key, value]) => [key, value - (reserved[key] ?? 0)]));可用性=结果; console.log(可用性);
      【解决方案3】:

      有很多方法可以解决这个问题,但我建议使用reduce()

      var availibilty = {
        "bike": 10,
        "cycle": 3,
        "car": 1
      };
      
      var reserved = {
        "cycle": 1,
        "bike": 10
      }
      
      function calc(a, b) {
        const answer = Object.keys(a).reduce((acc, key) => {
          return {
            ...acc,
            [key]: a[key] - (b[key] || 0)
          }
        }, {});
        console.log(answer);
      }
      
      calc(availibilty, reserved);

      【讨论】:

        【解决方案4】:

        您可以循环遍历您提供的一个对象的Object. keys(),并使用 reduce() 方法减去另一个。

        var availibilty = {"bike":10,"cycle":3,"car":1};
        var reserved ={"cycle":1,"bike":10}
        
        
        let response = Object.keys(availibilty).reduce((x, y) => {
            x[k] = availibilty[y] - reserved[y];
            return x;
        }, {});
        
        console.log(response);
        
        

        【讨论】:

          【解决方案5】:

          请找到Array.reduce 实现。

          逻辑

          • 循环遍历availability 对象的键。
          • reserved 对象中查找每个键的值。
          • 将差异存储为accumulator 数组中相同键的值。

          var availability = { "bike": 10, "cycle": 3, "car": 1 };
          var reserved = { "cycle": 1, "bike": 10 };
          const response = Object.keys(availability).reduce((acc, curr) => {
            acc[curr] = availability[curr] - (reserved[curr] || 0);
            return acc;
          }, {});
          console.log(response);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-03-31
            • 1970-01-01
            • 2020-06-06
            • 2015-05-09
            • 1970-01-01
            相关资源
            最近更新 更多