【发布时间】:2022-01-19 16:23:56
【问题描述】:
我写了一个以特定方式过滤对象的函数(按键分组,但只有连续的,它工作正常)。
groupBySequentialValues(array, key) {
let groupName = null;
let groupIndex = 0;
let result = []; // keep this in mind!
array.forEach((el, index) => {
if (groupName !== array[index][key]) {
groupName = array[index][key]
groupIndex++;
result[groupIndex + '_' + groupName] = []
}
result[groupIndex + '_' + groupName].push(el);
})
alert(result);
console.log(result);
}
起初警报显示一个空数组,但警报关闭后,控制台日志将显示正确组装的数组。 (当然,这也是在没有警报的情况下发生的,这只是最好地显示了差异)
但是我不能在警报或模板中使用这个数组(我在 VueJS 中使用它来呈现一个列表,但就像我说的那样它是空的)。
开发工具似乎看到了它的内容,但警报/dom没有。
在将结果数组声明为对象({} 而不是[])后,它起作用了。
为什么开发工具/控制台日志会以这种方式运行?它是一个调试工具,但是当它像这样运行时,我不能依赖它作为调试工具..
【问题讨论】:
-
您可能正在向它推送一个对象,但它仍然是一个没有数组索引的数组?
-
是这个--->
result[groupIndex + '_' + groupName] -
Javascript 中的数组只是一个具有特殊能力的对象,例如是
iterable并继承Array.prototype。因此,您可以像使用对象一样在其上声明任何新属性。这正是你正在做的事情。 -
@Randy Casburn 我知道我的代码有什么问题。请阅读整个问题:)
标签: javascript google-chrome-devtools console.log