使用简单的lodash/underscore函数将对象数组从一种形式转换为另一种形式



我有一个JavaScript数组,格式如下:

[{key: '123', data: ['a', 'b', 'c']}, {key:'234', data: ['b', 'c', 'd']}];

预期结果:

[{a: '123'}, {b:['123', '234'}, {c:['123', '234']}, {d:['234']}]

我尝试了groupBy, map, reduce和其他几个lodash函数,但没有返回接近我需要的。

下面的代码可以工作,但是我不喜欢使用两个for循环。我相信有更好的方法来做到这一点。请建议。

var inputArr =[{关键:"123",数据:[' a ', ' b ', ' c ']},{关键:"234",数据:[' b ', ' c ', ' d ']}];

var outputArr = [];
var tempObj = {};
angular.forEach(inputArr, function(obj) {
    var key = obj.key;
    angular.forEach(obj.data, function(data) {
        tempObj[data] = {'data': data, 'key': key};
    });
});
outputArr = _.map(tempObj, function(value, index){
  return {'data': index, 'key': value};
});

//[{a: '123'}, {b:['123', '234'}, {c:['123', '234']}, {d:['234']}]

只是为了lulz =):

var t = [{key: '123', data: ['a', 'b', 'c']}, {key:'234', data: ['b', 'c', 'd']}];
var r = {};
var k = _.each(_.uniq([].concat.apply([], _.pluck(t, 'data'))), function(p){
    r[p] = _.pluck(_.filter(t, function(n){return n.data.indexOf(p) > -1}), 'key');
});
console.log(JSON.stringify(r));

结果(作为对象):

{"a":["123"],"b":["123","234"],"c":["123","234"],"d":["234"]}

:

var r = [];
var k = _.each(_.uniq([].concat.apply([], _.pluck(t, 'data'))), function(p){
    var q = {};
    q[p] = _.pluck(_.filter(t, function(n){return n.data.indexOf(p) > -1}), 'key');
    r.push(q);
});

Result (as array):

[{"a":["123"]},{"b":["123","234"]},{"c":["123","234"]},{"d":["234"]}]

相关内容

最新更新