从对象数组中删除键并将值转换为键值对

时间:2019-02-25 19:41:40

标签: javascript arrays underscore.js

我有一个如下数组:

data =
   [{'province': 'North', 'level': 1, 'count': 204},
    {'province': 'South', 'level': 1, 'count': 24},
    {'province': 'East', 'level': 1, 'count': 24},
    {'province': 'West', 'level': 1, 'count': 39}];

我要删除属性级别,并希望将省值作为键,将计数值作为使所需输出的值:

result = 
   {'North':204, 'South':24, 'East':24, 'West':39}

我已经可以通过以下操作删除'level属性:

let test = _.map(data, function(currentObject) {
    return _.pick(currentObject, "province", "count");
  });

这给了我:

test = 
    [{'province': 'North', 'count': 204},
    {'province': 'South', 'count': 24},
    {'province': 'East', 'count': 24},
    {'province': 'West', 'count': 39}];

我如何获得理想的结果?

3 个答案:

答案 0 :(得分:4)

这可以通过 Array.reduce() 完成:

let data =[
  {'province': 'North', 'level': 1, 'count': 204},
  {'province': 'South', 'level': 1, 'count': 24},
  {'province': 'East', 'level': 1, 'count': 24},
  {'province': 'West', 'level': 1, 'count': 39}
];

let res = data.reduce((acc, curr) =>
{
    acc[curr.province] = curr.count;
    return acc;
}, {});

console.log(res);

答案 1 :(得分:2)

鉴于我理解了期望的结果,请将数据映射到一个新对象中:

const data =
      [{'province': 'North', 'level': 1, 'count': 204},
       {'province': 'South', 'level': 1, 'count': 24},
       {'province': 'East', 'level': 1, 'count': 24},
       {'province': 'West', 'level': 1, 'count': 39}];

const provinces = data.map(d => ({ [d.province]: d.count }));

console.log(provinces)

答案 2 :(得分:0)

一种非常简短的方法是使用所需属性映射新对象,并将所有对象分配给单个对象。

var data = [{ province: 'North', level: 1, count: 204 }, { province: 'South', level: 1, count: 24 }, { province: 'East', level: 1, count: 24 }, { province: 'West', level: 1, count: 39 }],
    result = Object.assign({}, ...data.map(({ province, count }) => ({ [province]: count })));

console.log(result);