根据条件和 javascript 中的 return 其他项目从数组中删除特定项目

Remove a particular item from array based on condition and return other items in javascript

我有一个包含以下对象的数组

selectedOption = [
    {
            id: 'REPORTORDER',
            name: 'reportOrder'
        },
    {
            id: 'REORDER',
            name: ‘reorder'
        },
    {
            id: 'RETURNPRODUCTS',
            name: 'returnProducts'
        },
     {
            id: 'ENTERPO',
            name: 'enterPo'
        }
]

基于如果 shipmentStatus 是 "CANCELLED" 并且 entriesList 是 [] 我想从上面的数组中删除第二个项目。

我试过使用下面写的过滤方法:

selectedOption.filter(item => (shipmentStatus == "CANCELLED" && entriesList == []) ? item.name != "reorder" : item.name)

如果我没看错你想根据外部条件改变数组,在这种情况下,你必须检查条件外面filter这样

let condition = true;
let selectedOption = [{
    id: 'REPORTORDER',
    name: 'reportOrder'
  },
  {
    id: 'REORDER',
    name: 'reorder'
  },
  {
    id: 'RETURNPRODUCTS',
    name: 'returnProducts'
  },
  {
    id: 'ENTERPO',
    name: 'enterPo'
  }
];
if (condition) selectedOption = selectedOption.filter(item => item.name != 'reorder')
console.log(selectedOption)

  1. filter returns 一个新数组,因此您需要将 selectedOption 重新分配给 filter 的结果。

  2. 条件总是会失败,因为 entriesList 永远不会等于一个新的空数组。最好通过将长度与零进行比较来检查数组是否为空。

  3. 最好检查过滤器外的全局条件。

if (shipmentStatus === 'CANCELLED' && Array.isArray(entriesList) && entriesList.length === 0) {
   selectedOption = selectedOption.filter(
     (item) => item.name != 'reorder'
   );
}
    const selectedOption = [
  {
    id: 'REPORTORDER',
    name: 'reportOrder',
  },
  {
    id: 'REORDER',
    name: 'reorder',
  },
  {
    id: 'RETURNPRODUCTS',
    name: 'returnProducts',
  },
  {
    id: 'ENTERPO',
    name: 'enterPo',
  }];

const shipmentStatus = 'cancelled';
const entriesList = [];

console.log(selectedOption.filter((x) => (x.name !== 'reorder') || !(shipmentStatus === 'cancelled' && !entriesList.length)));