我有一个javascript方法,正在尝试按“日期”对数据进行分组,效果很好。 但是当我查看对象的长度时,它显示为“零”。
有更好的方法吗?并保留新变量的长度?
void SetCheckedNodes(TreeNodeCollection allNodes, IEnumerable<string> excludedFiles)
{
foreach (TreeNode node in allNodes)
{
foreach (string ef in excludedFiles)
{
if (ef == node.FullPath)
{
node.Checked = true;
}
}
if (node.Nodes.Count > 0)
SetCheckedNodes(node.Nodes, excludedFiles);
}
}
答案 0 :(得分:1)
您正在将属性推入数组。您没有设置数组的索引。因此,您应该使用对象而不是数组。您对reduce的使用也不正确。您将其视为forEach循环。
因此,使用一个对象并使用减少其应有的方式
let list = this.orders.reduce(function (o, c) {
o[c.date] = o[c.date] || []
o[c.date].push(c)
return o
}, {})
console.log(Object.keys(list).length)
答案 1 :(得分:0)
我会为此使用字典(键,值)
list {
date1: [obj1-1, obj1-2, ...],
date2: [obj2-1, obj2-2, ...],
...
}
list = {};
this.orders.forEach(order => {
if (!list.hasOwnProperty(order.date)) {
// If it is the first time we meet this date, create an array with th first element
list[order.date] = [order];
} else {
// We have already meet the date, thus the key exists and so do the array. Add element to array
list[order.date].push(order);
}
});
似乎您有一个数组,其索引是日期。我假设日期是个大数字(1970年的日期以毫秒为单位),这可能会导致非常大的数组99.9%为空。这就是为什么我认为您应该使用对象而不是数组。
或者这些不是日期,而是日期的ID?