通过对象中的帖子ID对评论进行分组

时间:2018-09-25 09:20:42

标签: javascript lodash

当我从服务器中获取评论时,它以评论数组的形式出现。

[
    { 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。

4 个答案:

答案 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);