gpt4 book ai didi

javascript - 首先使用 groupBy,然后使用 lodash 根据名称对数组进行排序?

转载 作者:行者123 更新时间:2023-11-30 14:31:43 27 4
gpt4 key购买 nike

我有一些 json 的形式:

data = { 
"1": {"name": "eve", "type": "sergeant", "age": 22},
"2": {"name": "bob", "type": "sergeant", "age": 33},
"3": {"name": "bats", "type": "private", "age": 90},
"4": {"name": "carol", "type": "captain", "age": 50},
"5": {"name": "noogle", "type": "sergeant", "age": 34},
"6": {"name": "good", "type": "sergeant", "age": 47},
"7": {"name": "alice", "type": "private", "age": 34}
}

我如何groupBy他们的类型,然后在每个类型中,他们按他们的名字升序排序

我试着用:

let grouped = _.groupBy(Object.keys(data), function(id) {
return data[id].type;
});

这会给我类似的东西:

{
"sergeant": ["1", "2", "5", "6"],
"private": ["3", "7"],
"captain": ["4"]
}

但是当我尝试 sortBy 时,它给了我与上面相同的对象:

_.map(Object.keys(grouped), function(type_name) {
grouped[type_name] = _.sortedBy(grouped[type_name], function(id) {
return data[id].name;
});
});

将对象组合在一起后如何对数组进行排序?有没有一种方法可以将 groupBysortBy 干净地链接在一起,而不是像上面那样拆分逻辑?

最佳答案

在使用 _.groupBy 对每个组进行分组后,您可以使用 _.mapValues 方法对它们进行排序。只需获取每个值并在您的 _.mapValues 回调函数中返回它的排序版本。

例子:

data = { 
"1": {"name": "eve", "type": "sergeant", "age": 22},
"2": {"name": "bob", "type": "sergeant", "age": 33},
"3": {"name": "bats", "type": "private", "age": 90},
"4": {"name": "carol", "type": "captain", "age": 50},
"5": {"name": "noogle", "type": "sergeant", "age": 34},
"6": {"name": "good", "type": "sergeant", "age": 47},
"7": {"name": "alice", "type": "private", "age": 34}
}

console.log(_.mapValues(_.groupBy(data, "type"), v => _.sortBy(v, "name")))
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

或者,如果您只想对键进行分组和排序,或者对键/值进行分组和排序,您可以使用相同的方法,尽管它看起来不太容易:

data = { 
"1": {"name": "eve", "type": "sergeant", "age": 22},
"2": {"name": "bob", "type": "sergeant", "age": 33},
"3": {"name": "bats", "type": "private", "age": 90},
"4": {"name": "carol", "type": "captain", "age": 50},
"5": {"name": "noogle", "type": "sergeant", "age": 34},
"6": {"name": "good", "type": "sergeant", "age": 47},
"7": {"name": "alice", "type": "private", "age": 34}
}

// If all you want are grouped and sorted keys:
console.log(_.mapValues(_.groupBy(_.keys(data), k => data[k].type), v => _.sortBy(v, i => data[i].name)))

// Or for grouped and sorted keys and values:
console.log(_.mapValues(_.groupBy(_.keys(data), k => data[k].type), v => _.sortBy(v, i => data[i].name).map(k => ({[k]: data[k]}))))
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>

关于javascript - 首先使用 groupBy,然后使用 lodash 根据名称对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51052896/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com