【问题标题】:Delete object by ID from nested object in the redux state Javascript / ES6从 Redux 状态 Javascript / ES6 中的嵌套对象中按 ID 删除对象
【发布时间】:2021-03-18 14:47:08
【问题描述】:

我正在尝试从处于 redux 状态的嵌套对象项中删除一个对象。我只能设法删除值而不是实际的键。我无法过滤它,因为它不是一个数组。我虽然也许 Object.keys(state.items[or_id]).reduce() 可能是一个选项?

状态:

items: {
      'b0ad5c5c-5cf4-40b5-9bc9-87f773ba3c06': {
        '7e8557dc-9352-4dea-a062-0a1d43371698': {
          value: {
            id: '7e8557dc-9352-4dea-a062-0a1d43371698',
            expires_on: '2020-11-19T14:22:18.182000+00:00'
          }
        },
        '7e8557dc-9352-4dea-a062-0a1d43371692': {
          value: {
            id: '7e8557dc-9352-4dea-a062-0a1d43371692',
            expires_on: '2021-11-19T14:22:18.182000+00:00'
          }
        }
      }
    },

减速器:

if(type === DELETE){
     const { or_id, in_id } = payload;
     return {
          ...state,
          items: {
            ...state.items,
            [or_id]: {
              ...state.items[or_id],
              [in_id]: {},
            },
          },
        };
}

如果我使用上面的这个方法,密钥仍然存在的状态。

 items: {
      'b0ad5c5c-5cf4-40b5-9bc9-87f773ba3c06': {
        '7e8557dc-9352-4dea-a062-0a1d43371698': {},
        '7e8557dc-9352-4dea-a062-0a1d43371692': {
          value: {
            id: '7e8557dc-9352-4dea-a062-0a1d43371692',
            expires_on: '2021-11-19T14:22:18.182000+00:00'
          }
        }
      }

预期结果(少一件):

 items: {
      'b0ad5c5c-5cf4-40b5-9bc9-87f773ba3c06': {
        '7e8557dc-9352-4dea-a062-0a1d43371692': {
          value: {
            id: '7e8557dc-9352-4dea-a062-0a1d43371692',
            expires_on: '2021-11-19T14:22:18.182000+00:00'
          }
        }
      }

【问题讨论】:

  • 移除该项目的条件是什么?
  • 你的意思是删除

标签: javascript reactjs redux ecmascript-6 state


【解决方案1】:

您可以通过多种方式做到这一点:

使用传播和休息

const removeKey = (key, object) => {
  //using spread and rest
  const { [key]: gone, ...rest } = object;
  return rest;
};
console.log(
  'remove key "W"',
  removeKey('W', { ok: 88, W: 'gone' })
);

使用 Object.fromEntries

//using Object.fromEntries
const removeKey = (key, object) =>
  Object.fromEntries(
    Object.entries(object).filter(([k]) => k !== key)
  );
console.log(
  'remove key "W"',
  removeKey('W', { ok: 88, W: 'gone' })
);

在浅拷贝上使用删除

//using delete on shallow copy
const removeKey = (key, object) => {
  const copy = { ...object };
  delete copy[key];
  return copy;
};
console.log(
  'remove key "W"',
  removeKey('W', { ok: 88, W: 'gone' })
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-25
    • 2020-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 1970-01-01
    • 2021-12-28
    • 2019-04-28
    相关资源
    最近更新 更多