Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Vue.js-为按字母顺序排序的列表创建字母标题_Javascript_Vue.js_Lodash_Nuxt.js - Fatal编程技术网

Javascript Vue.js-为按字母顺序排序的列表创建字母标题

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

我正在迭代以下类型的JSON对象:

"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