【问题标题】:Remove one of two duplicated fields in object array javascript/react-native删除对象数组 javascript/react-native 中两个重复字段之一
【发布时间】:2020-04-02 03:24:39
【问题描述】:

我有一个返回名称的对象数组:字符串和数量:数字,问题是我在数组中有许多对象具有相同的名称字段值但不同的数量值,所以我想显示所有对象的总数每个重复名称的数量。我的代码在这里:

const productsArray = [{ name: "lamp", quantity: 10 }, {name: "glass", quantity: 4}, {name:"lamp", quantity: 5}]

灯是重复的,但它有不同的数量值,所以我想将这些数量值合并为一个总量并只显示一次名称。

期望的结果

产品名称:灯 产品数量:15

产品名称:玻璃 产品数量:4

请帮忙

【问题讨论】:

    标签: javascript arrays reactjs react-native duplicates


    【解决方案1】:

    你的意思是这样的?

    let productsObj = {};
    for (let i = 0; i < productsArray.length; i++) {
      let item = productsArray[i];
      if (!!(productsObj[item.name])) {
        productsObj[item.name] += item.quantity;
      } else {
        productsObj[item.name] = item.quantity;
      }
    }   
    

    通过这种方式,您基本上可以将对象用作项目的键值对,并使用产品名称(或其 id,如果有的话)访问它们。要将其恢复为列表,您可以执行以下操作:

    const productsArray = [];
    for (let name in productsObj) {
       productsArray.push({ name: name, quantity: productsObj[name] });
    }
    

    【讨论】:

      【解决方案2】:

      这是一种选择:-

      const productsArray = [{ name: "lamp", quantity: 10 }, {name: "glass", quantity: 4}, {name:"lamp", quantity: 5}]
      
      
      var output = [];
      
      productsArray.forEach(function(item) {
        var existing = output.filter(function(v, i) {
          return v.name == item.name;
        });
        if (existing.length) {
          var existingIndex = output.indexOf(existing[0]);
          output[existingIndex].quantity += item.quantity;
        } else {
          output.push(item);
        }
      });
      
      console.dir(output);

      【讨论】:

        【解决方案3】:

        我可能会使用reduceObject.entriesmap 的组合来完成此操作。

        const productsArray = [{ name: "lamp", quantity: 10 }, {name: "glass", quantity: 4}, {name:"lamp", quantity: 5}];
        
        const combined = productsArray.reduce((acc, el) => {
          if (acc[el.name] === undefined) {
            acc[el.name] = 0;
          }
          acc[el.name] += el.quantity;
          return acc;
        }, {});
        
        const final = Object.entries(combined).map(([name, quantity]) => ({
          name,
          quantity
        }));
        
        console.log(final);

        【讨论】:

          【解决方案4】:

          替代方案将执行如下操作:https://jsfiddle.net/yo2sad95/

          const productsArray = [
            { name: 'lamp', quantity: 10 },
            { name: 'glass', quantity: 4 },
            { name: 'lamp', quantity: 5 },
          ]
          
          const quantities = productsArray.reduce((accum, curr) => {
            const value = accum[curr.name] || 0
            return { ...accum, [curr.name]: value + curr.quantity }
          }, {})
          
          const result = Object.keys(quantities).map(product => ({ [product]: quantities[product] }))
          console.warn(result)
          
          

          【讨论】:

            猜你喜欢
            • 2020-08-11
            • 2018-11-14
            • 1970-01-01
            • 1970-01-01
            • 2019-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-05-09
            相关资源
            最近更新 更多