如何删除Javascript / Typescript中另一个对象上存在的对象属性

dy2hfwbg  于 2022-12-28  发布在  Java
关注(0)|答案(2)|浏览(265)

我有这样一个目标:

{
  "id": "33343232",
  "createdAt": "2022-07-26T13:44:01.080Z",
  "updatedAt": "2022-07-26T13:45:31.000Z",
  "name": "Name Here",
  "description": "text",
}

另一个目的是:

specificFeatures": {
    "id": "33343232",
    "createdAt": "2022-07-26T13:44:01.087Z",
    "updatedAt": "2022-07-26T13:45:31.000Z",
    "name": "Name Here",
    "description": "text",
    "coverage": "international",
    "income": 0,
    "observationIncome": "",
}

现在,我希望删除与第一个对象相同的specificFeatures对象的属性键。
在本例中,它将是:

specificFeatures": {
    "coverage": "international",
    "income": 0,
    "observationIncome": "",
}

你能告诉我怎么做吗?

emeijp43

emeijp431#

要实现这一点,您只需遍历对象属性,检查“原始”对象是否具有该属性,如果是,则将其从“specificFeatures”对象中删除:

const original = {
  "id": "33343232",
  "createdAt": "2022-07-26T13:44:01.080Z",
  "updatedAt": "2022-07-26T13:45:31.000Z",
  "name": "Name Here",
  "description": "text",
}

const specificFeatures = {
  "id": "33343232",
  "createdAt": "2022-07-26T13:44:01.087Z",
  "updatedAt": "2022-07-26T13:45:31.000Z",
  "name": "Name Here",
  "description": "text",
  "coverage": "international",
  "income": 0,
  "observationIncome": "",
}

// Iterate over object keys
Object.keys(specificFeatures).forEach(prop => {
  // Check if the "original" object has the property defined
  if (original.hasOwnProperty(prop)) {
    // Delete the property from the "specificFeatures" object
    delete specificFeatures[prop];
  }
});

console.log(specificFeatures);

注意这种方式会改变原始对象,如果需要保持原始对象不变,则应创建一个新的唯一副本。可能的解决方案之一是Object.entries()Array.reduce()方法的组合:

const original = {
  "id": "33343232",
  "createdAt": "2022-07-26T13:44:01.080Z",
  "updatedAt": "2022-07-26T13:45:31.000Z",
  "name": "Name Here",
  "description": "text",
}

const specificFeatures = {
  "id": "33343232",
  "createdAt": "2022-07-26T13:44:01.087Z",
  "updatedAt": "2022-07-26T13:45:31.000Z",
  "name": "Name Here",
  "description": "text",
  "coverage": "international",
  "income": 0,
  "observationIncome": "",
}

const result = Object.entries(specificFeatures).reduce((acc, [key, val]) => {
  if (!original.hasOwnProperty(key))
    acc[key] = val;
  return acc;
}, {});

console.log(result);
console.log('Is a different object:', result !== specificFeatures);
nx7onnlm

nx7onnlm2#

这可以通过一个简单的一行代码来实现:

var specificFeatures = {
  "id": "33343232",
  "createdAt": "2022-07-26T13:44:01.087Z",
  "updatedAt": "2022-07-26T13:45:31.000Z",
  "name": "Name Here",
  "description": "text",
  "coverage": "international",
  "income": 0,
  "observationIncome": "",
}

var myObj = {
  "id": "33343232",
  "createdAt": "2022-07-26T13:44:01.080Z",
  "updatedAt": "2022-07-26T13:45:31.000Z",
  "name": "Name Here",
  "description": "text",
}

const newObj = Object.fromEntries(Object.entries(specificFeatures).filter(([key]) => !(myObj.hasOwnProperty(key))));
console.log(newObj);

上面的代码将对象转换为一个条目数组,然后在转换回Object之前根据myObj过滤键。

相关问题