【问题标题】:JS How to remove object in multi demension array?JS如何删除多维数组中的对象?
【发布时间】:2021-01-26 13:43:58
【问题描述】:

我有这样的数组


let quotes = [
  {
    quoteNumber :'001',
    items : [
       {
         partnumber : '5551',
         supplierQty : 0,
         stock : 5
       },
      {
         partnumber : '5552',
         supplierQty : 1,
         stock : 0
       },
      {
         partnumber : '5553',
         supplierQty : 0,
         stock : 2
       }
    ]
  },
  {
    quoteNumber : '002',
    items : [
       {
         partnumber : '5554',
         supplierQty : 1,
         stock : 0
       },
      {
         partnumber : '5552',
         supplierQty : 5,
         stock : 0
       },
      {
         partnumber : '5553',
         supplierQty : 0,
         stock : 2
       }
    ]
  },
  {
    quoteNumber : '003',
    items : [
       {
         partnumber : '5554',
         supplierQty : 0,
         stock : 1
       },
      {
         partnumber : '5552',
         supplierQty : 0,
         stock : 3
       },
      {
         partnumber : '5553',
         supplierQty : 0,
         stock : 2
       }
    ]
  }
]

我想要的结果是删除报价中具有供应商Qty === 0 的项目并删除其中每个项目都具有供应商Qty === 0 的报价

这就是我想要的结果。


let quotes = [
  {
    quoteNumber :'001',
    items : [
       
      {
         partnumber : '5552',
         supplierQty : 1,
         stock : 0
       }
    ]
  },
  {
    quoteNumber : '002',
    items : [
       {
         partnumber : '5554',
         supplierQty : 1,
         stock : 0
       },
      {
         partnumber : '5552',
         supplierQty : 5,
         stock : 0
       }
    ]
  }
]


这是我的代码


let results = quotes.filter((quote , index) => {
  
   let filterQuote = quote.items.filter((item) => {
       return item.supplierQty > 0; 
    })
   
   return filterQuote.length > 0;
  
})
                   

console.log(results);

但它只是删除报价 003 only 。它没有删除引用 001 和 002 中的项目。

我该怎么做。感谢帮助


results = [
  {
    quoteNumber :'001',
    items : [
       {
         partnumber : '5551',
         supplierQty : 0,
         stock : 5
       },
      {
         partnumber : '5552',
         supplierQty : 1,
         stock : 0
       },
      {
         partnumber : '5553',
         supplierQty : 0,
         stock : 2
       }
    ]
  },
  {
    quoteNumber : '002',
    items : [
       {
         partnumber : '5554',
         supplierQty : 1,
         stock : 0
       },
      {
         partnumber : '5552',
         supplierQty : 5,
         stock : 0
       },
      {
         partnumber : '5553',
         supplierQty : 0,
         stock : 2
       }
    ]
  }
]


【问题讨论】:

    标签: javascript multidimensional-array ecmascript-6


    【解决方案1】:

    如果内部过滤的长度大于零,则需要减少数组并仅过滤内部部分并添加一个新数组。

    let quotes = [{ quoteNumber: '001', items: [{ partnumber: '5551', supplierQty: 0, stock: 5 }, { partnumber: '5552', supplierQty: 1, stock: 0 }, { partnumber: '5553', supplierQty: 0, stock: 2 }] }, { quoteNumber: '002', items: [{ partnumber: '5554', supplierQty: 1, stock: 0 }, { partnumber: '5552', supplierQty: 5, stock: 0 }, { partnumber: '5553', supplierQty: 0, stock: 2 }] }, { quoteNumber: '003', items: [{ partnumber: '5554', supplierQty: 0, stock: 1 }, { partnumber: '5552', supplierQty: 0, stock: 3 }, { partnumber: '5553', supplierQty: 0, stock: 2 }] }],
        result = quotes.reduce((r, { items, ...o }) => {
            items = items.filter(({ supplierQty }) => supplierQty);
            if (items.length) r.push({ ...o, items });
            return r;
        }, []);
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案2】:

      您需要先过滤项目并使用Array.filter删除不包含任何项目的引用。

      const quotes = [
        {
          quoteNumber :'001',
          items : [
             {
               partnumber : '5551',
               supplierQty : 0,
               stock : 5
             },
            {
               partnumber : '5552',
               supplierQty : 1,
               stock : 0
             },
            {
               partnumber : '5553',
               supplierQty : 0,
               stock : 2
             }
          ]
        },
        {
          quoteNumber : '002',
          items : [
             {
               partnumber : '5554',
               supplierQty : 1,
               stock : 0
             },
            {
               partnumber : '5552',
               supplierQty : 5,
               stock : 0
             },
            {
               partnumber : '5553',
               supplierQty : 0,
               stock : 2
             }
          ]
        },
        {
          quoteNumber : '003',
          items : [
             {
               partnumber : '5554',
               supplierQty : 0,
               stock : 1
             },
            {
               partnumber : '5552',
               supplierQty : 0,
               stock : 3
             },
            {
               partnumber : '5553',
               supplierQty : 0,
               stock : 2
             }
          ]
        }
      ];
      
      const results = quotes.map(({ items, ...quote }) => ({
        ...quote,
        items: items.filter(({ supplierQty }) => supplierQty > 0)
      })).filter(({ items }) => items.length > 0);
      
      console.log(results);

      【讨论】:

        猜你喜欢
        • 2020-05-18
        • 1970-01-01
        • 2016-11-28
        • 1970-01-01
        • 2016-01-30
        • 1970-01-01
        • 2016-02-26
        • 1970-01-01
        • 2021-02-16
        相关资源
        最近更新 更多