Javascript Vue.js-为按字母顺序排序的列表创建字母标题
我正在迭代以下类型的JSON对象:Javascript Vue.js-为按字母顺序排序的列表创建字母标题,javascript,vue.js,lodash,nuxt.js,Javascript,Vue.js,Lodash,Nuxt.js,我正在迭代以下类型的JSON对象: "entries": [{ "first_name": "Brigitte", "last_name": "Bardot", "country": "Paris, France", "profession": "Actress" }, { "first_name": "Apollo", "last_name": "AA", "country": "Witten, Germany", "pr
"entries": [{
"first_name": "Brigitte",
"last_name": "Bardot",
"country": "Paris, France",
"profession": "Actress"
},
{
"first_name": "Apollo",
"last_name": "AA",
"country": "Witten, Germany",
"profession": "Writer"
}]
使用v-for和lodash,我有一个按字母顺序排列的条目列表:
<div v-for="user in orderedUsers" :key='user' class="user">
<p>{{ user.first_name }} {{ user.last_name }} ({{ user.country }}), {{ user.profession }}</p>
</div>
有什么简单有效的方法可以做到这一点吗?按
姓氏对条目进行排序,并按每个用户的第一个字母分组。使用flatMap迭代项目,并添加键(姓氏)字母
在vue中,使用v-if
(项目为字符串)和v-else
来决定渲染项目或标题
const{flow,orderBy,groupBy,flatMap,get}=_
const entries=[{“first_name”:“Brigitte”,“last_name”:“Bardot”,“country”:“Paris,France”,“professional”:“actor”},{“first_name”:“Apollo”,“last_name”:“AA”,“country”:“Witten,Germany”,“professional”:“Writer”}]
const groupItems=flow([
arr=>orderBy(arr,“姓氏”),
arr=>groupBy(arr,o=>get(o,'last_name[0]',''.toUpperCase()),
组=>flatMap(组,(v,k)=>[
K
v
])
])
新Vue({
el:“#应用程序”,
数据:{orderedUsers:groupItems(条目)}
})
/**隐藏恼人的vue生产消息**/
.作为控制台包装{
显示:无!重要;
}
{{item}}
{{item.first_name}{{{item.last_name}}({{item.country}),{{item.profession}
在此期间提出了以下解决方案,但我相信Ori Dori的答案更简单
let users = orderBy(this.text[0].entries, 'last_name');
const map1 = users.map(x => x.last_name.substring(0,1));
const letters = map1.filter(function(item, index){
return map1.indexOf(item) >= index;
});
const groups = {};
// create groups containers from names
letters.forEach(k => {
groups[k] = []
});
users.forEach(k => {
const user = k.last_name.substring(0,1)
groups[user].push(k)
})
return groups
将他们分组:投票支持这一点,因为它最简洁。谢谢
let users = orderBy(this.text[0].entries, 'last_name');
const map1 = users.map(x => x.last_name.substring(0,1));
const letters = map1.filter(function(item, index){
return map1.indexOf(item) >= index;
});
const groups = {};
// create groups containers from names
letters.forEach(k => {
groups[k] = []
});
users.forEach(k => {
const user = k.last_name.substring(0,1)
groups[user].push(k)
})
return groups