javascript - JS如何删除多维数组中的对象?

标签 javascript multidimensional-array ecmascript-6

我有这样的数组


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
       }
    ]
  }
]

我想要的结果是删除报价中具有 vendor Qty === 0 的项目并删除其中每个项目都具有 vendor 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
       }
    ]
  }
]


最佳答案

您需要先过滤项目并使用 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);

关于javascript - JS如何删除多维数组中的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64314555/

相关文章:

c++ - 访问多维数组元素c++

javascript - Array.map 函数不适用于对象值

typescript - 超额属性(property)检查有何帮助?

javascript - 无法从 DOM 中的输入文本获取值

java - Java中为二维数组赋值

javascript - Vue中JS与SCSS共享变量

c - 将二维数组传递给线程函数

javascript - 字符串迭代行为

javascript - 通过键访问 JavaScript 对象

javascript - 我如何捕获 CS7036 错误