我有一个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"]}]