我已经在vuex商店中实现了一个似乎很简单的JavaScript函数,但是该函数似乎是异步的。在Chrome中使用console.log()
可以得到完整的数组,但是尝试console.log(JSON.parse(JSON.stringify(array)))
可以得到一个空数组。据我所知,这表明我代码的某些部分是异步运行的,我真的很想弄清楚如何将此行为更改为同步。
我的代码:
function groupBy(array, key){
let list = [];
array.forEach(element =>{
if(!list[element[key]]){
list[element[key]] = [element];
}else{
list[element[key]].push(element);
}
});
return list;
}
我正在测试输出:
let list = groupBy(items, 'grpstr');
console.log(JSON.parse(JSON.stringify(list)));
console.log(list);
return list;
同样,在chrome控制台中,第一个log()返回一个空数组,而第二个返回正确的数组。我这是怎么了?
我尝试将累积的数组更改为一个对象,该对象可以(奇怪地)工作,但是我需要将此数组传递到vuejs应用中以进行迭代,而vue不会以有用的方式迭代对象键(至少对于我的应用而言)。
编辑: 传递给函数的数据是以下形式的对象数组:
[{grpstr: "01-31-2017" ...}, {grpstr: "01-31-2017" ...}, {grpstr: "01-31-2017" ...} ]
答案 0 :(得分:0)
这与异步无关。不要将数组用作对象。序列化数组时,所有非数字属性都将被删除,这就是为什么它们不在您的第一个日志中出现的原因。通常,数组是与数字键一起使用的,因此在这里对象是一个更好的选择(因为您的键是非数字的)。