【问题标题】:Alternative way to remove object from an array of json objects other than splice从除 splice 之外的 json 对象数组中删除对象的替代方法
【发布时间】:2021-07-23 19:57:20
【问题描述】:

我对 JavaScript 还是很陌生,我需要帮助解决我遇到的问题。

我有一个返回 json 对象数组的 Java 函数:

{
  "payload": {
    "phone": "1234567890",
    "email": "test@test.com",
    "contact": {
      "personal": "test test",
      "professional": "professionaltest test"
    }
  }
}

现在我的 API 测试中有各种场景,我发送 POST 请求,但故意遗漏了 json 中的一些键/值对。如:

  1. 通过跳过联系发送请求。
  2. 跳过电话发送请求。

我研究过,似乎可以使用 .splice 来删除对象。但是,据我了解,删除标准主要由索引(索引?)驱动。我宁愿不使用 remove by index 以防将来更改函数的输出。有没有办法按键名删除?任何替代方法也将不胜感激。

【问题讨论】:

  • 您在寻找the delete operator 吗?
  • 可以使用.findIndex()通过键名查找索引,然后调用splice()
  • 你展示的不是一个对象数组,它只是一个包含嵌套对象的单个对象。
  • 你通过key从对象中删除:delete obj.payload.contact;
  • 您的示例缺少数组?你说的array of是哪一个?

标签: javascript json api


【解决方案1】:

这是我最喜欢的从对象中删除值的方法。 例如,您想从有效负载对象中删除电话。

  var { payload } = // your object
  var { phone, ...newValue } = payload
  console.log(newValue)

newValue 是没有电话键值的有效负载对象的副本。

【讨论】:

    【解决方案2】:
    function removeByKeys(obj, keys) {
      return Object.keys(obj).reduce((newObj, key) => {
        if (keys.includes(key)) {
          return newObj;
        }
        return { ...newObj, [key]: obj[key] };
      }, {});
    }
    
    const person = { name: 'bob', age: 36 };
    
    removeByKeys(person, ['age']); // { name: 'bob' }
    

    与 lodash 省略的 API 相同。 https://lodash.com/docs/4.17.15#omit。如果你有更复杂的用例,你可以使用它,但上面很简单。

    【讨论】:

      猜你喜欢
      • 2019-04-29
      • 2019-11-25
      • 2019-03-18
      • 2018-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      相关资源
      最近更新 更多