【问题标题】:How do I do this in Lodash?我如何在 Lodash 中做到这一点?
【发布时间】:2017-11-02 09:49:46
【问题描述】:

我有一个来自数据库结果的类似数组的结构

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}, {name: 'c', age: 35}] 

我想创建一个新对象,其值为键和值,如下所示:

var new_arra  = {a: 23, b: 24, c: 35}

如何在 lodash 中做到这一点?

我尝试了以下方法:

var result = _.forEach(results, function(index) {
    var result = _.map(index, function(value, prop) {
        return {prop: prop, value: value};
    });
});

【问题讨论】:

  • 只使用地图! const newResults results = results.map(item => ({ [item.name]: item.age }));
  • 如果要从Array转到Object,则需要使用reduce

标签: javascript node.js lodash


【解决方案1】:

使用 ES5 - 使用空对象的初始值使用 Array#reduce 进行迭代。在每次迭代中,将名称设置为键,将年龄设置为值。

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}, {name: 'c', age: 35}];

var result = arr.reduce(function(obj, o) {
  obj[o.name] = o.age;

  return obj;
}, {});

console.log(result);

使用 ES6 - 使用Array#map 进行迭代,使用destructuring 获取值,并使用computed property names 进行设置。使用Object#assignspread syntax 将所有对象合并为一个对象:

const arr = [{name: 'a', age: 23}, {name: 'b', age: 24}, {name: 'c', age: 35}];

const result = Object.assign({}, ...arr.map(({ name, age }) => ({ [name]: age })));

console.log(result);

【讨论】:

    【解决方案2】:

    你可以这样用纯JS做到这一点:

    var arr = [{
      name: 'a',
      age: 23
    }, {
      name: 'b',
      age: 24
    }, {
      name: 'c',
      age: 35
    }]
    
    var result = {};
    
    arr.forEach(function(item) {
      result[item.name] = item.age
    });
    
    console.log(result);

    reduce 的另一种方式:

    var arr = [{
      name: 'a',
      age: 23
    }, {
      name: 'b',
      age: 24
    }, {
      name: 'c',
      age: 35
    }];
    
    var result = arr.reduce(function(store, item) {
      store[item.name] = item.age;
      return store;
    }, {});
    
    console.log(result);

    【讨论】:

    • 您好,您能再检查一下我的问题吗?我刚刚更新了我需要的响应,它刚刚关闭并正在运行,请您提供更多帮助。
    • @Sachin Solanki 我更新了我的答案并解决了你的问题,你想创建一个新对象,而不是数组。
    • @Sachin Solanki 是你需要的吗?
    【解决方案3】:

    你只需要这两行

    let newData = {};
    arr.map((item)=>newData[item.name]=item.age);
    
    console.log(newData);
    

    或者你也可以使用 lodash

     let newData = {};
     _.map(arr,(item)=>newData[item.name]=item.age);
    

    【讨论】:

      【解决方案4】:

      这很简单。

      您需要做的就是遍历每个数据并将其插入到一个新的空对象中。 例如。

      let new_arra = {};
      
      _.each(arr, a => {
       new_arra[a.name] = a.age
      });
      

      【讨论】:

        猜你喜欢
        • 2019-04-30
        • 2019-07-25
        • 1970-01-01
        • 1970-01-01
        • 2022-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-08
        相关资源
        最近更新 更多