【问题标题】:Pull properties from an object by their name into a different object按名称将对象中的属性拉入不同的对象
【发布时间】:2017-06-03 13:33:52
【问题描述】:

我正在用 VueJS 做一个项目,我有一个数据数组,它由许多对象组成。

这些对象是从 PHP 后端提取的,由类似的值组成

编号:2123 名称:“名称值” 状态:“活跃” account_id: "2KGGALS2353255"

想象一下,我想通过键名将它们拆分成一个类似的数组,但我想要一个包含两个子对象的父对象

[
    0: {
     core: {
       id: 2123
       name: "Name Value"
     },
     extra: {
       status: "active",
       account_id: "2KGGALS2353255" 
     }
]

问题是如何使用 Javascript 实现这一点?我真的不想事先修改 PHP 中的数据,除非这是在 Javascript 中非常不建议做的事情。 我可以使用 VueJS 和 Lodash。

【问题讨论】:

  • 你能把你想要的东西放在前面 -> 后面吗?我想它会更清楚

标签: javascript json lodash


【解决方案1】:

我正在寻找 lodash 的 pick() 方法。

https://lodash.com/docs/4.17.4#pick

【讨论】:

    【解决方案2】:

    这应该适合您的目的

    function separate(obj, keys) {
      let target = {}, rest = {};
      Object.keys(obj).forEach(function(key) {
        if (keys.includes(key)) {
          target[key] = obj[key];
        } else {
          rest[key] = obj[key];
        }
      });
      return { target: target, rest: rest };
    }
    
    let stuff = { 
      id: 2123,
      name: "Name Value",
      status: "active",
      account_id: "2KGGALS2353255" 
    };
    
    let separated = separate(stuff, ['id', 'name']);
    
    console.log({
      core: separated.target,
      extra: separated.rest
    });

    【讨论】:

      【解决方案3】:

      使用 ES6 的 object destructuring,以及需要 babel transformobject rest spread 提议,您可以将 Array#map 数组转换为所需格式的新对象数组:

      const arr = [{"id":1,"name":"Name1","status":"active","account_id":"2KGGALS2353255"},{"id":2,"name":"Name2","status":"active","account_id":"4ABCLS2353255"},{"id":3,"name":"Name3","status":"active","account_id":"6LMNALS2353255"}];
      
      const result = arr.map(({ id, name, ...extra }) => ({
        core: {
          id,
          name
        },
        extra
      }));
      
      console.log(result);

      您可以使用 lodash 的_.pick() 来获取核心,并使用_.omit() 来获取额外

      var arr = [{"id":1,"name":"Name1","status":"active","account_id":"2KGGALS2353255"},{"id":2,"name":"Name2","status":"active","account_id":"4ABCLS2353255"},{"id":3,"name":"Name3","status":"active","account_id":"6LMNALS2353255"}];
      
      var result = arr.map(function(obj) {
        return {
          core: _.pick(obj, ['id', 'name']),
          extra: _.omit(obj, ['id', 'name'])
        };
      });
      
      console.log(result);
      <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-25
        • 2016-07-06
        • 2016-01-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        相关资源
        最近更新 更多