【发布时间】:2020-03-18 18:05:38
【问题描述】:
我正在尝试对一组对象进行排序和分组。但是,我遇到了一个问题,即调用键名“驱动程序”返回“未定义”。
代码如下:
let hos = [
{
"Driver": "test-000000",
"Date": "3/15/2020",
"Status": "Off-Duty",
"Time": "12:00 AM",
"": "",
"__1": "",
"__2": ""
},
{
"Driver": "test-000000",
"Date": "3/16/2020",
"Status": "Off-Duty",
"Time": "12:00 AM",
"": "",
"__1": "",
"__2": ""
}
];
let hosByDriver = [];
hos.forEach((item, index) => {
// If the current item.Driver string match the previous or next '.Driver' push it to an array inside hosByDriver[targetedDriver] else push it by itself
if (item.Driver == hos[index + 1].Driver || item.Driver == hos[index - 1].Driver) {
hosByDriver[item.Driver].push(item);
} else {
hosByDriver[item.Driver].push(item);
}
});
【问题讨论】:
-
hos[index + 1].Driver或hos[index - 1].Driver可能会尝试访问hos数组上的undefined值,尤其是在index === 0或index === hos.length - 1时,这将在迭代时发生两次在一个数组上,每个条件一次。 -
hosByDriver是数组,而不是对象。我认为错误在这里:hosByDriver[item.Driver] -
您的代码没有任何意义。你在 if & else 语句中做同样的事情。
-
感谢大家的回复!我发现您可以通过字符串而不是索引值调用数组索引。因此,我为什么要这样做。不幸的是,我失去了使用物体推动的能力。不知道为什么我会遇到这个问题,似乎是基本的 js .. @palash,本质上,如果在当前“项目”之前或之后没有其他条目,它只会将其推送到数组中。 IE。司机当天下班,状态只会是下班,没有其他条目
-
你是对的。它确实做同样的事情。我得重写这个......
标签: javascript arrays json sorting grouping