当我从服务器中获取评论时,它以评论数组的形式出现。
[
{ content: "foo1", postId: 1 },
{ content: "foo2", postId: 1 },
{ content: "foo3", postId: 1 },
{ content: "foo4", postId: 2 },
{ content: "foo5", postId: 2 },
{ content: "foo6", postId: 3 }
]
我想将它们分组为一个对象,例如:
{
1: [
{ content: "foo1", postId: 1 },
{ content: "foo2", postId: 1 },
{ content: "foo3", postId: 1 }
],
2: [
{ content: "foo4", postId: 2 },
{ content: "foo5", postId: 2 }
],
3: [
{ content: "foo6", postId: 3 }
]
}
我敢肯定,这很容易,我尝试使用groupBy或keyBy并使用带有指点的lodash进行许多组合,但是我仍然找不到正确的答案。我正在使用lodash。
答案 0 :(得分:2)
将lodash中的_.groupBy与功能回调一起使用,以返回postId,如
const arr = [
{ content: "foo1", postId: 1 },
{ content: "foo2", postId: 1 },
{ content: "foo3", postId: 1 },
{ content: "foo4", postId: 2 },
{ content: "foo5", postId: 2 },
{ content: "foo6", postId: 3 }
]
console.log(_.groupBy(arr, function(obj) { return obj.postId}))
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
答案 1 :(得分:1)
使用 ES6 ,您可以尝试以下操作:
const grouped = comments.reduce((map, comment) => {
if (!map.hasOwnProperty(comment.postId))
map[comment.postId] = []
map[comment.postId].push(comment)
return map
}, {});
答案 2 :(得分:1)
var array = [
{ content: "foo1", postId: 1 },
{ content: "foo2", postId: 1 },
{ content: "foo3", postId: 1 },
{ content: "foo4", postId: 2 },
{ content: "foo5", postId: 2 },
{ content: "foo6", postId: 3 }
];
var formatedData = _.groupBy(array, 'postId');
答案 3 :(得分:1)
您可以按照以下方式操作:
var array = [
{ content: "foo1", postId: 1 },
{ content: "foo2", postId: 1 },
{ content: "foo3", postId: 1 },
{ content: "foo4", postId: 2 },
{ content: "foo5", postId: 2 },
{ content: "foo6", postId: 3 }
];
var result = {};
array.map(current=>{
//find key
if(result.hasOwnProperty(current.postId)){
//exist the key postId, let add
result[current.postId].push(current);
}else{
//not exist key postId, add new object to result
result[current.postId] = [];
Object.assign(result[current.postId], [current]);
};
});
console.log(result);