Javascript Js:对对象数组进行排序和重新排列

Javascript Js:对对象数组进行排序和重新排列,javascript,arrays,sorting,Javascript,Arrays,Sorting,我的数组对象如下例所示 [ {'email':'test@gmail.com', 'name':'abc'}, {'email':'test1@gmail.com', 'name':'bbc'}, {'email':'test2@gmail.com', 'name':'aaa'}, {'email':'test3@gmail.com', 'name':'cba'}, {'email':'test3@gmail.com', 'name':'cab'}, ] 因此,我的新数组将以字母A的

我的数组对象如下例所示

[
 {'email':'test@gmail.com', 'name':'abc'},
 {'email':'test1@gmail.com', 'name':'bbc'},
 {'email':'test2@gmail.com', 'name':'aaa'},
 {'email':'test3@gmail.com', 'name':'cba'},
 {'email':'test3@gmail.com', 'name':'cab'},
]
因此,我的新数组将以字母A的键值pare作为键,值都是名称从A字母开始的对象,依此类推。还有一件事是,如果字母A有两个从A开始的对象,那么我还想按照最终输出中显示的升序进行排序下面的例子

我想要的最终输出是这样的

[
  "a" : [{'email':'test@gmail.com', 'name':'aaa'},{'email':'test2@gmail.com', 'name':'abc'}],
  "b" : [{'email':'test1@gmail.com', 'name':'bbc'}],
  "c" : [{'email':'test3@gmail.com', 'name':'cab'},{'email':'test3@gmail.com', 'name':'cba'}]
]

您可以使用lodash groupBy方法来实现所需的结果

var collection =[
 {'email':'test@gmail.com', 'name':'abc'},
 {'email':'test1@gmail.com', 'name':'bbc'},
 {'email':'test2@gmail.com', 'name':'aaa'},
 {'email':'test3@gmail.com', 'name':'cba'},
 {'email':'test3@gmail.com', 'name':'cab'},
]

console.log(_.groupBy(collection, (item) => {
    return item.name[0]
}))

您可以使用lodash groupBy方法来实现所需的结果

var collection =[
 {'email':'test@gmail.com', 'name':'abc'},
 {'email':'test1@gmail.com', 'name':'bbc'},
 {'email':'test2@gmail.com', 'name':'aaa'},
 {'email':'test3@gmail.com', 'name':'cba'},
 {'email':'test3@gmail.com', 'name':'cab'},
]

console.log(_.groupBy(collection, (item) => {
    return item.name[0]
}))

您可以对数组进行排序,然后将其分组

var数组=[{email:'test@gmail.com“,名称:'abc'},{电子邮件:'test1@gmail.com“,名称:'bbc'},{电子邮件:'test2@gmail.com“,名称:'aaa'},{电子邮件:'test3@gmail.com“,名称:'cba'},{电子邮件:'test3@gmail.com,名称:'cab'}],
分组=数组
.sort(({name:a},{name:b})=>a.localeCompare(b))
.减少((r,o)=>{
var group=o.name[0]。toLowerCase();
(r[群]=r[群]| |[])。推(o);
返回r;
},Object.create(null));
控制台日志(分组)

。作为控制台包装{max height:100%!important;top:0;}
您可以对数组进行排序,然后对其进行分组

var数组=[{email:'test@gmail.com“,名称:'abc'},{电子邮件:'test1@gmail.com“,名称:'bbc'},{电子邮件:'test2@gmail.com“,名称:'aaa'},{电子邮件:'test3@gmail.com“,名称:'cba'},{电子邮件:'test3@gmail.com,名称:'cab'}],
分组=数组
.sort(({name:a},{name:b})=>a.localeCompare(b))
.减少((r,o)=>{
var group=o.name[0]。toLowerCase();
(r[群]=r[群]| |[])。推(o);
返回r;
},Object.create(null));
控制台日志(分组)

.as console wrapper{max height:100%!important;top:0;}
您可以使用
reduce
方法创建一个对象,并在
sort
方法中按名称对值进行排序

const data=[{'email':'test@gmail.com','name':'Abc'},{'email':'test1@gmail.com','name':'bbc'},{'email':'test2@gmail.com','name':'aaa'},{'email':'test3@gmail.com','name':'cba'},{'email':'test3@gmail.com','name':'cab'},]
const sorted=data.reduce((r,o)=>{
让key=o.name.slice(0,1.toLowerCase();
r[key]=(r[key]| |[])。concat(o);
r[key].sort((a,b)=>a.name.localeCompare(b.name));
返回r;
}, {})

log(排序)
您可以使用
reduce
方法创建对象,并在
sort
方法中按名称对值进行排序

const data=[{'email':'test@gmail.com','name':'Abc'},{'email':'test1@gmail.com','name':'bbc'},{'email':'test2@gmail.com','name':'aaa'},{'email':'test3@gmail.com','name':'cba'},{'email':'test3@gmail.com','name':'cab'},]
const sorted=data.reduce((r,o)=>{
让key=o.name.slice(0,1.toLowerCase();
r[key]=(r[key]| |[])。concat(o);
r[key].sort((a,b)=>a.name.localeCompare(b.name));
返回r;
}, {})

console.log(已排序)
您可以使用array reduce:


您可以使用array reduce进行设置:

var数组=[
{'email':'test@gmail.com','name':'abc'},
{'email':'test1@gmail.com','name':'bbc'},
{'email':'test2@gmail.com','name':'aaa'},
{'email':'test3@gmail.com','name':'cba'},
{'email':'test3@gmail.com','name':'cab'},
]
函数getArray(数组=[])){
让newObject={};
array.forEach(i=>{
让key=i['name'].切片(0,1)
if(key&&newObject[key]){
新建对象[key].push(i)
}否则{
newObject[key]=数组(i)
}
}) 
返回新对象
}
console.log(getArray(array))
var数组=[
{'email':'test@gmail.com','name':'abc'},
{'email':'test1@gmail.com','name':'bbc'},
{'email':'test2@gmail.com','name':'aaa'},
{'email':'test3@gmail.com','name':'cba'},
{'email':'test3@gmail.com','name':'cab'},
]
函数getArray(数组=[])){
让newObject={};
array.forEach(i=>{
让key=i['name'].切片(0,1)
if(key&&newObject[key]){
新建对象[key].push(i)
}否则{
newObject[key]=数组(i)
}
}) 
返回新对象
}

log(getArray(array))
在数组中循环,基于它创建一个对象,并按照填充的顺序对其进行排序

const myArr=[
{'email':'test@gmail.com','name':'abc'},
{'email':'test1@gmail.com','name':'bbc'},
{'email':'test2@gmail.com','name':'aaa'},
{'email':'test3@gmail.com','name':'cba'},
{'email':'test3@gmail.com','name':'cab'}
];
常量finalObj={};
功能比较(a、b){
如果(a.nameb.name)
返回1;
返回0;
}
myArr.forEach(项目=>{
常量alph=item.name.substr(0,1);
if(finalObj[alph]){
finalObj[alph]=[…finalObj[alph],项].排序(比较);
}否则{
finalObj[alph]=[项目];
}
});

console.log(finalObj)在数组中循环,基于数组创建一个对象,并按填充的顺序对其进行排序

const myArr=[
{'email':'test@gmail.com','name':'abc'},
{'email':'test1@gmail.com','name':'bbc'},
{'email':'test2@gmail.com','name':'aaa'},
{'email':'test3@gmail.com','name':'cba'},
{'email':'test3@gmail.com','name':'cab'}
];
常量finalObj={};
功能比较(a、b){
如果(a.nameb.name)
返回1;
返回0;
}
myArr.forEach(项目=>{
常量alph=item.name.substr(0,1);
if(finalObj[alph]){
finalObj[alph]=[…finalObj[alph],项].排序(比较);
}否则{
finalObj[alph]=[项目];
}
});

console.log(finalObj)你试过什么吗?你的预期输出格式无效?你试过什么吗?你的预期输出格式无效。这应该是一个注释。如果你想回答,请提供一些具体的代码。此外,问题标签不包括lodash,因此,如果建议的解决方案是用Vanillash制作的,那将是最好的