JavaScript循环,创建对象,但长度为零

时间:2019-11-19 20:50:10

标签: javascript

我有一个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);
    }
}

2 个答案:

答案 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?