如何在react-native中从数组中删除多个对象

时间:2021-02-10 11:31:38

标签: javascript react-native redux

我有这样的数组:

     const data = [
          {
            id: '1',
          
            Products:[{
            ProductID: '1',
            },
            {
            ProductID: '2',
            },,
            {
            ProductID: '3',
            }]
           },
          {
            id: '2',
            Products:[{
            ProductID: '1',
            }]
          }
       ]

我想删除这样的项目:

我发送 id 即数据 id 和产品,如下所示:

dispatch({
      type: "delete",
      payload: { id, products },
    });
<块引用>

例如: id : 1 products : [{ ProductID: '1'},{ ProductID: '2'}]

因此此方法将删除 id == 1 的数据项和发送的对象

我试过了:

return {
        ...state,
        data: state.data.map((content, i) =>
          content.id === action.payload.id 
            ? {
                ...content,
                Products: content.Products.filter(
                  (item) => {
                    return action.payload.products.map((product) => {
                      product.id != item.id;
                    });
                  }
                ),
              }
            : content
        ),
      };

2 个答案:

答案 0 :(得分:0)

试试这个。

return {
...state,
data: state.data.map((content, i) =>
    content.id === action.payload.id ?
    {
        ...content,
        Products: content.Products.filter(
            item => action.payload.products.find(product => product.id != item.id);
        ),
    } :
    content),
};

答案 1 :(得分:0)

根据评论,您可以像这样从子对象中过滤产品,

return {
   ...state,
   data: state.data.map((content, i) => {
      if (content.id != action.payload.id) {
         return content;
      } else {
         return {
            id: content.id,
            Products: content.Products.filter(i => {
               if (!action.payload.products.find(p => p.ProductId == i.ProductId) return i)
            })
         }
      }
   }
};

在这里试试这个代码,

const data = [
    {
        id: "1",
        Products: [
            {
                ProductID: "1",
            },
            {
                ProductID: "2",
            },
            {
                ProductID: "3",
            },
        ],
    },
    {
        id: "2",
        Products: [
            {
                ProductID: "1",
            },
        ],
    },
]

function deleteRecord(id, products) {
    return data.map((item) => {
        if (item.id != id) {
            return item
        } else {
            return {
                id: item.id,
                Products: item.Products.filter((i) => {
                    if (!products.find((p) => p.ProductID == i.ProductID)) return i
                }),
            }
        }
    })
}

console.log(JSON.stringify(deleteRecord("1", [{ ProductID: "1" }, { ProductID: "2" }])))

相关问题