使用lodash将对象转换为数组

 博瑞恩张更新 发布于 2023-01-04 11:09

我怎样才能改变一个大objectarray与lodash?

例:

var obj = {
  22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[],}
  12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[],}
}

// transform to 
var arr = [{name:"John", id:22...},{name:"Ivan", id:12...}]

谢谢!

9 个回答
  • 如果您希望将密钥(在本例中为id)保留为您可以执行的每个数组项的属性

    const arr = _(obj) //wrap object so that you can chain lodash methods
                .mapValues((value, id)=>_.merge({}, value, {id})) //attach id to object
                .values() //get the values of the result
                .value() //unwrap array of objects
    

    2023-01-04 11:10 回答
  • _.toArray(obj);
    

    输出为:

    [
      {
        "name": "Ivan",
        "id": 12,
        "friends": [
          2,
          44,
          12
        ],
        "works": {
          "books": [],
          "films": []
        }
      },
      {
        "name": "John",
        "id": 22,
        "friends": [
          5,
          31,
          55
        ],
        "works": {
          "books": [],
          "films": []
        }
      }
    ]"
    

    2023-01-04 11:10 回答
  • 你可以做

    var arr = _.values(obj);
    

    有关文档,请参阅此处

    2023-01-04 11:10 回答
  • 对我来说,这工作:

    _.map(_.toPairs(data), d => _.fromPairs([d]));
    

    事实证明

    {"a":"b", "c":"d", "e":"f"} 
    

    [{"a":"b"}, {"c":"d"}, {"e":"f"}]
    

    2023-01-04 11:10 回答
  • 2017更新:Object.values,lodash 值和toArray做到了.并保留键映射和传播操作符很好:

    // import { toArray, map } from 'lodash'
    const map = _.map
    
    const input = {
      key: {
        value: 'value'
      }
    }
    
    const output = map(input, (value, key) => ({
      key,
      ...value
    }))
    
    console.log(output)
    // >> [{key: 'key', value: 'value'}])
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
    2023-01-04 11:11 回答
  • 有很多方法可以得到您想要的结果。让我们按类别细分它们:

    仅ES6值

    主要方法是Object.values。但是使用Object.keysArray.map您也可以达到预期的结果:

    Object.values(obj)
    Object.keys(obj).map(k => obj[k])
    

    Object.values(obj)
    Object.keys(obj).map(k => obj[k])
    
    2023-01-04 11:11 回答
  • 使用纯JavaScript(ECMAScript-2016)将对象转换为数组Object.values:

    var obj = {
        22: {name:"John", id:22, friends:[5,31,55], works:{books:[], films:[]}},
        12: {name:"Ivan", id:12, friends:[2,44,12], works:{books:[], films:[]}}
    }
    
    var values = Object.values(obj)
    
    console.log(values);
    2023-01-04 11:11 回答
  • 如果有兴趣,现代原生解决方案:

    const arr = Object.keys(obj).map(key => ({ key, value: obj[key] }));
    

    感谢@KoushikChatterjee的改进

    2023-01-04 11:11 回答
  • var arr = _.map(obj)

    您也可以使用_.map(lodashunderscore)的函数object,它将在内部处理该情况,迭代每个值并使用您的iteratee键,最后返回一个数组.事实上,_.map(obj)如果你只想要一个值数组,你可以在没有任何迭代的情况下使用它(只是).好的方面是,如果你需要在它们之间进行任何转换,你可以一次性完成.

    例:

    var obj = {
        key1: {id: 1, name: 'A'},
        key2: {id: 2, name: 'B'},
        key3: {id: 3, name: 'C'}
    };
    
    var array1 = _.map(obj, v=>v);
    console.log('Array 1: ', array1);
    
    /*Actually you don't need the callback v=>v if you
    are not transforming anything in between, v=>v is default*/
    
    //SO simply you can use
    var array2 = _.map(obj);
    console.log('Array 2: ', array2);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
    2023-01-04 11:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有