Javascript 在JS中使用唯一键创建嵌套对象
可能会因此而被否决,但JS对我来说仍然是一个新的野兽。我从数据库中获得了一个数据对象,希望将其组织在JS数组对象中,如下所示:Javascript 在JS中使用唯一键创建嵌套对象,javascript,arrays,javascript-objects,Javascript,Arrays,Javascript Objects,可能会因此而被否决,但JS对我来说仍然是一个新的野兽。我从数据库中获得了一个数据对象,希望将其组织在JS数组对象中,如下所示: [ A: [ {"id": 28, "name": "Ackerman, William"}, {"id": 18, "name": "Anderson, Sherry"}, ], B: [ {"id": 42, "name": "Barry, Tristan"}, {"id": 33, "name
[ A: [
{"id": 28, "name": "Ackerman, William"},
{"id": 18, "name": "Anderson, Sherry"},
],
B: [
{"id": 42, "name": "Barry, Tristan"},
{"id": 33, "name": "Baker, Lionel"},
],
C: [
{"id": 79, "name": "Chen, Amy"},
{"id": 21, "name": "Chen, Benjamin"},
{"id": 86, "name": "Cornish, Jezebel"}
]
.....
]
因此,我希望唯一键是姓氏的字母,并在组中嵌套一个姓氏的人员列表。我只知道如何分离出唯一的字母,但当我在每个键下列出名字时,我就不知所措了
var list = [];
for(var i=0; i< employees.length; i++) {
var key = employees[i].firstletter;
var obj = {"id": employees[i].employee_id, "name": employees[i].last_name + ', '+ employees[i].first_name};
var name = [];
name.push(obj);
list[key] = name;
}
var list=[];
对于(变量i=0;i
当然,这只会给我每个组的最后一个结果…问题是您正在为每个员工重新创建
名称
数组。相反,如果已经为该键
(员工姓名首字母)创建了一个数组,只需重用它即可。如果没有,请创建一个新的:
var list = [];
for(var i=0; i< employees.length; i++) {
var key = employees[i].firstletter;
var obj = {"id": employees[i].employee_id, "name": employees[i].last_name + ', '+ employees[i].first_name};
var name = list[key] || [];
name.push(obj);
list[key] = name;
}
var list=[];
对于(变量i=0;i
这是因为
未定义的
结果(当列表
对象不包含键
时,列表[key]
得到的结果)是“falsy”,因此在这种情况下,名称
变量将被分配一个空数组。您可以使用一个对象对数组进行分组和迭代
var data=[{id:28,名字:“威廉”,名字:“阿克曼”},{id:18,名字:“雪莉”,名字:“安德森”},{id:42,名字:“特里斯坦”,名字:“巴里”},{id:33,名字:“莱昂内尔”,名字:“贝克”},{id:79,名字:“艾米”,名字:“陈”},{id:21,名字:“本杰明”,名字:“陈”},{id:86,名:'Jezebel',姓:'Cornish'},
grouped=Object.create(空);
data.forEach(函数(a){
分组的[a.lastname[0]]=分组的[a.lastname[0]]| |[];
已分组[a.lastname[0]]。推送({id:a.id,name:[a.lastname,a.firstname]。加入(',)});
});
console.log(分组);
。作为控制台包装{max height:100%!important;top:0;}
请同时添加原始数据。第一个代码块中的语法不正确,fwiw:array notation不允许字母数字键;它只是一个值列表。如果需要字母数字键,则需要一个普通对象初始值设定项({/code>).基本上,外部的[]
应该是{}
。