Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 在JS中使用唯一键创建嵌套对象_Javascript_Arrays_Javascript Objects - Fatal编程技术网

Javascript 在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

可能会因此而被否决,但JS对我来说仍然是一个新的野兽。我从数据库中获得了一个数据对象,希望将其组织在JS数组对象中,如下所示:

[ 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>).基本上,外部的
[]
应该是
{}