【问题标题】:How to remove unwanted properties from linked object?如何从链接对象中删除不需要的属性?
【发布时间】:2021-06-09 08:49:18
【问题描述】:

我有以下结构:

{
  cp: {
    id: 8,
    login: "something@gmail.com",
    name: "Yuri",
    age: 19,
    ...
  },
  admin: {
    id: 19,
    login: "test",
    password: "somehash",
    ...
  }
}

我希望这个对象只有idlogin 属性,比如:

{
  cp: {
    id: 8,
    login: "something@gmail.com"
  },
  admin: {
    id: 19,
    login: "test"
  }
}

有没有办法使用 lodash 做到这一点? 我已阅读this answer,但我不知道如何对我的结构执行相同的操作。请帮忙。

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    您可以使用transformpick 来转换您的对象。

    const obj = { cp: { id: 8, login: "something@gmail.com", name: "Yuri", age: 19, }, admin: { id: 19, login: "test", password: "somehash", }, },
          result = _.transform(obj, (r, v, k) => {
            r[k] = _.pick(v, ['id', 'login']);
            return r;
          }, {});
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>

    【讨论】:

      【解决方案2】:

      我知道您专门使用lodash 搜索了解决方案,但您也可以像这样完成同样的事情。

      const data = {
        cp: {
          id: 8,
          login: "something@gmail.com",
          name: "Yuri",
          age: 19,
        },
        admin: {
          id: 19,
          login: "test",
          password: "somehash",
        }
      }
      
      const result = Object.fromEntries(Object.entries(data)
        .map(([k, {id, login}]) => [k, {id, login}]));
      
      console.log(result);

      它通过对象entries 进行映射,并仅返回您需要的属性作为重新创建对象的新条目。

      【讨论】:

      • 谢谢。我考虑过。
      【解决方案3】:

      我不测试这个,代码,但希望它对你有帮助

      var obj = {
        cp: {
          id: 8,
          login: "something@gmail.com",
          name: "Yuri",
          age: 19,
          ...
        },
        admin: {
          id: 19,
          login: "test",
          password: "somehash",
          ...
        }
      }
      var model = {
         id:null,
         login:null
      };
      Object.keys(obj).forEach(e=>obj[e] = _.pick(obj[e], _.keys(model)))
      

      不用lodash更新

      var obj = {
                      cp: {
                          id: 8,
                          login: "something@gmail.com",
                          name: "Yuri",
                          age: 19,
                      },
                      admin: {
                          id: 19,
                          login: "test",
                          password: "somehash",
                      }
                  }
                  const keeps = ["id","login"];
                  Object.keys(obj).forEach(e=>{
                      Object.keys(obj[e]).forEach(f=>{
                          if(!keeps.includes(f)){
                              delete obj[e][f]
                          }
                      })
                  })
      

      【讨论】:

      • 1.无需创建另一个对象 model 并使用 _.keys(model) 因为您只需放置一个数组:['id', 'login']。 2. 我只想使用lodash 来做我想做的事,所以我认为使用naitve Object.keys() 是个好主意......有没有更好的方法来做到这一点只使用lodash
      • @LeonardoDiPierro 还有另一种不用lodash的方法,使用关键字:“delete”从对象中删除属性
      • 您是否建议将每个属性一一删除,即使它们的数量可以达到10-15?
      猜你喜欢
      • 2016-09-20
      • 2011-05-09
      • 1970-01-01
      • 2019-10-09
      • 2023-01-26
      • 2022-07-06
      • 2021-09-11
      • 1970-01-01
      相关资源
      最近更新 更多