首页 > 解决方案 > 使用reactjs提交时无法从对象中删除数组和属性(多个)

问题描述

我的目标是从对象中删除一个数组 [] 和一些属性。我可以通过方法从对象中删除一个属性,delete但是当我想删除多个属性时,它会显示如下错误The operand of a 'delete' operator must be optional.

Experience数组有一个对象,它可能有多个对象。

experience: [
    {
        organisation: "",
        id: "",
        from: "",
        to: "",
        skills: [],
        achievements: 0,
    },
    {
        organisationName: "",
        id: "",
        from: "",
        to: "",
        skills: [],
        achievements: 0,
    }
]

这是代码:

let skillsArray = this.state.experiences.map((item) => {
  let newItem = { ...item }
  delete newItem.skills;
  delete newItem.achievements;
  return newItem;
})

任何人都可以在这个查询中帮助我吗?

标签: javascript

解决方案


这是 TypeScript 编译器错误,而不是 JavaScript 运行时错误。a 的形状与 original 的形状newItem相同item,并且原始item声音具有 requiredskillsachievementsproperties,因此delete不允许通过删除它们(因为现有对象将与键入的形状不匹配)。

出于类似的原因,以下情况也是不允许的:

const obj = {
    foo: 'val1',
    bar: 'val2',
};
delete obj.foo;

(因为 的类型obj,如果被删除{ foo: string; bar: string; }就会不正确)foo

您可以改为解构不需要的属性,并使用 rest 语法来收集新对象的属性:

let skillsArray = this.state.experiences.map((item) => {
  const { skills, achievements, ...newItem } = item;
  return newItem;
})

推荐阅读