计算数组大数据中的对象

问题描述 投票:0回答:2

我怎么能算出这个数组对象中有多少个对象?在子对象中还有带对象的数组。不是很容易理解...你好看了stackoverflow但没有找到一个有用的答案。我在这个问题上找了一个例子:Link。也许我可以递归。有人有想法吗?还可以有100个物体阵列。

这只是一个例子:

let DATA = {
    "name": "flare",
    "children": [{
        "name": "analytics",
        "children": [{
            "name": "cluster",
            "children": [{
                "name": "AgglomerativeCluster",
                "size": 3938
            }, {
                "name": "CommunityStructure",
                "size": 3812
            }, {
                "name": "HierarchicalCluster",
                "size": 6714
            }, {
                "name": "MergeEdge",
                "size": 743
            }]
        }, {
            "name": "graph",
            "children": [{
                "name": "BetweennessCentrality",
                "size": 3534
            }, {
                "name": "LinkDistance",
                "size": 5731
            }, {
                "name": "MaxFlowMinCut",
                "size": 7840
            }, {
                "name": "ShortestPaths",
                "size": 5914
            }, {
                "name": "SpanningTree",
                "size": 3416
            }]
        }, {
            "name": "optimization",
            "children": [{
                "name": "AspectRatioBanker",
                "size": 7074
            }]
        }]
    }, {
        "name": "animate",
        "children": [{
            "name": "Easing",
            "size": 17010
        }, {
            "name": "FunctionSequence",
            "size": 5842
        }, {
            "name": "interpolate",
            "children": [{
                "name": "ArrayInterpolator",
                "size": 1983
            }, {
                "name": "ColorInterpolator",
                "size": 2047
            }, {
                "name": "DateInterpolator",
                "size": 1375
            }, {
                "name": "Interpolator",
                "size": 8746
            }, {
                "name": "MatrixInterpolator",
                "size": 2202
            }, {
                "name": "NumberInterpolator",
                "size": 1382
            }, {
                "name": "ObjectInterpolator",
                "size": 1629
            }, {
                "name": "PointInterpolator",
                "size": 1675
            }, {
                "name": "RectangleInterpolator",
                "size": 2042
            }]
        }, {
            "name": "ISchedulable",
            "size": 1041
        }, {
            "name": "Parallel",
            "size": 5176
        }, {
            "name": "Pause",
            "size": 449
        }, {
            "name": "Scheduler",
            "size": 5593
        }, {
            "name": "Sequence",
            "size": 5534
        }, {
            "name": "Transition",
            "size": 9201
        }, {
            "name": "Transitioner",
            "size": 19975
        }, {
            "name": "TransitionEvent",
            "size": 1116
        }, {
            "name": "Tween",
            "size": 6006
        }]
    }, {
        "name": "data",
        "children": [{
            "name": "converters",
            "children": [{
                "name": "Converters",
                "size": 721
            }, {
                "name": "DelimitedTextConverter",
                "size": 4294
            }, {
                "name": "GraphMLConverter",
                "size": 9800
            }, {
                "name": "IDataConverter",
                "size": 1314
            }, {
                "name": "JSONConverter",
                "size": 2220
            }]
        }, {
            "name": "DataField",
            "size": 1759
        }, {
            "name": "DataSchema",
            "size": 2165
        }, {
            "name": "DataSet",
            "size": 586
        }, {
            "name": "DataSource",
            "size": 3331
        }, {
            "name": "DataTable",
            "size": 772
        }, {
            "name": "DataUtil",
            "size": 3322
        }]
    }, {
        "name": "display",
        "children": [{
            "name": "DirtySprite",
            "size": 8833
        }, {
            "name": "LineSprite",
            "size": 1732
        }, {
            "name": "RectSprite",
            "size": 3623
        }, {
            "name": "TextSprite",
            "size": 10066
        }]
    }, {
        "name": "flex",
        "children": [{
            "name": "FlareVis",
            "size": 4116
        }]
    }, {
        "name": "physics",
        "children": [{
            "name": "DragForce",
            "size": 1082
        }, {
            "name": "GravityForce",
            "size": 1336
        }, {
            "name": "IForce",
            "size": 319
        }, {
            "name": "NBodyForce",
            "size": 10498
        }, {
            "name": "Particle",
            "size": 2822
        }, {
            "name": "Simulation",
            "size": 9983
        }, {
            "name": "Spring",
            "size": 2213
        }, {
            "name": "SpringForce",
            "size": 1681
        }]
    }, {
        "name": "query",
        "children": [{
            "name": "AggregateExpression",
            "size": 1616
        }, {
            "name": "And",
            "size": 1027
        }, {
            "name": "Arithmetic",
            "size": 3891
        }, {
            "name": "Average",
            "size": 891
        }, {
            "name": "BinaryExpression",
            "size": 2893
        }, {
            "name": "Comparison",
            "size": 5103
        }, {
            "name": "CompositeExpression",
            "size": 3677
        }, {
            "name": "Count",
            "size": 781
        }, {
            "name": "DateUtil",
            "size": 4141
        }, {
            "name": "Distinct",
            "size": 933
        }, {
            "name": "Expression",
            "size": 5130
        }, {
            "name": "ExpressionIterator",
            "size": 3617
        }, {
            "name": "Fn",
            "size": 3240
        }, {
            "name": "If",
            "size": 2732
        }, {
            "name": "IsA",
            "size": 2039
        }, {
            "name": "Literal",
            "size": 1214
        }, {
            "name": "Match",
            "size": 3748
        }, {
            "name": "Maximum",
            "size": 843
        }, {
            "name": "methods",
            "children": [{
                "name": "add",
                "size": 593
            }, {
                "name": "and",
                "size": 330
            }, {
                "name": "average",
                "size": 287
            }, {
                "name": "count",
                "size": 277
            }, {
                "name": "distinct",
                "size": 292
            }, {
                "name": "div",
                "size": 595
            }, {
                "name": "eq",
                "size": 594
            }, {
                "name": "fn",
                "size": 460
            }, {
                "name": "gt",
                "size": 603
            }, {
                "name": "gte",
                "size": 625
            }, {
                "name": "iff",
                "size": 748
            }, {
                "name": "isa",
                "size": 461
            }, {
                "name": "lt",
                "size": 597
            }, {
                "name": "lte",
                "size": 619
            }, {
                "name": "max",
                "size": 283
            }, {
                "name": "min",
                "size": 283
            }, {
                "name": "mod",
                "size": 591
            }, {
                "name": "mul",
                "size": 603
            }, {
                "name": "neq",
                "size": 599
            }, {
                "name": "not",
                "size": 386
            }, {
                "name": "or",
                "size": 323
            }, {
                "name": "orderby",
                "size": 307
            }, {
                "name": "range",
                "size": 772
            }, {
                "name": "select",
                "size": 296
            }, {
                "name": "stddev",
                "size": 363
            }, {
                "name": "sub",
                "size": 600
            }, {
                "name": "sum",
                "size": 280
            }, {
                "name": "update",
                "size": 307
            }, {
                "name": "variance",
                "size": 335
            }, {
                "name": "where",
                "size": 299
            }, {
                "name": "xor",
                "size": 354
            }, {
                "name": "_",
                "size": 264
            }]
        }, {
            "name": "Minimum",
            "size": 843
        }, {
            "name": "Not",
            "size": 1554
        }, {
            "name": "Or",
            "size": 970
        }, {
            "name": "Query",
            "size": 13896
        }, {
            "name": "Range",
            "size": 1594
        }, {
            "name": "StringUtil",
            "size": 4130
        }, {
            "name": "Sum",
            "size": 791
        }, {
            "name": "Variable",
            "size": 1124
        }, {
            "name": "Variance",
            "size": 1876
        }, {
            "name": "Xor",
            "size": 1101
        }]
    }, {
        "name": "scale",
        "children": [{
            "name": "IScaleMap",
            "size": 2105
        }, {
            "name": "LinearScale",
            "size": 1316
        }, {
            "name": "LogScale",
            "size": 3151
        }, {
            "name": "OrdinalScale",
            "size": 3770
        }, {
            "name": "QuantileScale",
            "size": 2435
        }, {
            "name": "QuantitativeScale",
            "size": 4839
        }, {
            "name": "dataScale",
            "size": 1756
        }, {
            "name": "Scale",
            "size": 4268
        }, {
            "name": "ScaleType",
            "size": 1821
        }, {
            "name": "TimeScale",
            "size": 5833
        }]
    }, {
        "name": "util",
        "children": [{
            "name": "Arrays",
            "size": 8258
        }, {
            "name": "Colors",
            "size": 10001
        }, {
            "name": "Dates",
            "size": 8217
        }, {
            "name": "Displays",
            "size": 12555
        }, {
            "name": "Filter",
            "size": 2324
        }, {
            "name": "Geometry",
            "size": 10993
        }, {
            "name": "heap",
            "children": [{
                "name": "FibonacciHeap",
                "size": 9354
            }, {
                "name": "HeapNode",
                "size": 1233
            }]
        }, {
            "name": "IEvaluable",
            "size": 335
        }, {
            "name": "IPredicate",
            "size": 383
        }, {
            "name": "IValueProxy",
            "size": 874
        }, {
            "name": "math",
            "children": [{
                "name": "DenseMatrix",
                "size": 3165
            }, {
                "name": "IMatrix",
                "size": 2815
            }, {
                "name": "SparseMatrix",
                "size": 3366
            }]
        }, {
            "name": "Maths",
            "size": 17705
        }, {
            "name": "Orientation",
            "size": 1486
        }, {
            "name": "palette",
            "children": [{
                "name": "ColorPalette",
                "size": 6367
            }, {
                "name": "Palette",
                "size": 1229
            }, {
                "name": "ShapePalette",
                "size": 2059
            }, {
                "name": "SizePalette",
                "size": 2291
            }]
        }, {
            "name": "Property",
            "size": 5559
        }, {
            "name": "Shapes",
            "size": 19118
        }, {
            "name": "Sort",
            "size": 6887
        }, {
            "name": "Stats",
            "size": 6557
        }, {
            "name": "Strings",
            "size": 22026
        }]
    }, {
        "name": "vis",
        "children": [{
            "name": "axis",
            "children": [{
                "name": "Axes",
                "size": 1302
            }, {
                "name": "Axis",
                "size": 24593
            }, {
                "name": "AxisGridLine",
                "size": 652
            }, {
                "name": "AxisLabel",
                "size": 636
            }, {
                "name": "CartesianAxes",
                "size": 6703
            }]
        }, {
            "name": "controls",
            "children": [{
                "name": "AnchorControl",
                "size": 2138
            }, {
                "name": "ClickControl",
                "size": 3824
            }, {
                "name": "Control",
                "size": 1353
            }, {
                "name": "ControlList",
                "size": 4665
            }, {
                "name": "DragControl",
                "size": 2649
            }, {
                "name": "ExpandControl",
                "size": 2832
            }, {
                "name": "HoverControl",
                "size": 4896
            }, {
                "name": "IControl",
                "size": 763
            }, {
                "name": "PanZoomControl",
                "size": 5222
            }, {
                "name": "SelectionControl",
                "size": 7862
            }, {
                "name": "TooltipControl",
                "size": 8435
            }]
        }, {
            "name": "data",
            "children": [{
                "name": "Data",
                "size": 20544
            }, {
                "name": "DataList",
                "size": 19788
            }, {
                "name": "DataSprite",
                "size": 10349
            }, {
                "name": "EdgeSprite",
                "size": 3301
            }, {
                "name": "NodeSprite",
                "size": 19382
            }, {
                "name": "render",
                "children": [{
                    "name": "ArrowType",
                    "size": 698
                }, {
                    "name": "EdgeRenderer",
                    "size": 5569
                }, {
                    "name": "IRenderer",
                    "size": 353
                }, {
                    "name": "ShapeRenderer",
                    "size": 2247
                }]
            }, {
                "name": "ScaleBinding",
                "size": 11275
            }, {
                "name": "Tree",
                "size": 7147
            }, {
                "name": "TreeBuilder",
                "size": 9930
            }]
        }, {
            "name": "events",
            "children": [{
                "name": "DataEvent",
                "size": 2313
            }, {
                "name": "SelectionEvent",
                "size": 1880
            }, {
                "name": "TooltipEvent",
                "size": 1701
            }, {
                "name": "VisualizationEvent",
                "size": 1117
            }]
        }, {
            "name": "legend",
            "children": [{
                "name": "Legend",
                "size": 20859
            }, {
                "name": "LegendItem",
                "size": 4614
            }, {
                "name": "LegendRange",
                "size": 10530
            }]
        }, {
            "name": "operator",
            "children": [{
                "name": "distortion",
                "children": [{
                    "name": "BifocalDistortion",
                    "size": 4461
                }, {
                    "name": "Distortion",
                    "size": 6314
                }, {
                    "name": "FisheyeDistortion",
                    "size": 3444
                }]
            }, {
                "name": "encoder",
                "children": [{
                    "name": "ColorEncoder",
                    "size": 3179
                }, {
                    "name": "Encoder",
                    "size": 4060
                }, {
                    "name": "PropertyEncoder",
                    "size": 4138
                }, {
                    "name": "ShapeEncoder",
                    "size": 1690
                }, {
                    "name": "SizeEncoder",
                    "size": 1830
                }]
            }, {
                "name": "filter",
                "children": [{
                    "name": "FisheyeTreeFilter",
                    "size": 5219
                }, {
                    "name": "GraphDistanceFilter",
                    "size": 3165
                }, {
                    "name": "VisibilityFilter",
                    "size": 3509
                }]
            }, {
                "name": "IOperator",
                "size": 1286
            }, {
                "name": "label",
                "children": [{
                    "name": "Labeler",
                    "size": 9956
                }, {
                    "name": "RadialLabeler",
                    "size": 3899
                }, {
                    "name": "StackedAreaLabeler",
                    "size": 3202
                }]
            }, {
                "name": "layout",
                "children": [{
                    "name": "AxisLayout",
                    "size": 6725
                }, {
                    "name": "BundledEdgeRouter",
                    "size": 3727
                }, {
                    "name": "CircleLayout",
                    "size": 9317
                }, {
                    "name": "CirclePackingLayout",
                    "size": 12003
                }, {
                    "name": "DendrogramLayout",
                    "size": 4853
                }, {
                    "name": "ForceDirectedLayout",
                    "size": 8411
                }, {
                    "name": "IcicleTreeLayout",
                    "size": 4864
                }, {
                    "name": "IndentedTreeLayout",
                    "size": 3174
                }, {
                    "name": "Layout",
                    "size": 7881
                }, {
                    "name": "NodeLinkTreeLayout",
                    "size": 12870
                }, {
                    "name": "PieLayout",
                    "size": 2728
                }, {
                    "name": "RadialTreeLayout",
                    "size": 12348
                }, {
                    "name": "RandomLayout",
                    "size": 870
                }, {
                    "name": "StackedAreaLayout",
                    "size": 9121
                }, {
                    "name": "TreeMapLayout",
                    "size": 9191
                }]
            }, {
                "name": "Operator",
                "size": 2490
            }, {
                "name": "OperatorList",
                "size": 5248
            }, {
                "name": "OperatorSequence",
                "size": 4190
            }, {
                "name": "OperatorSwitch",
                "size": 2581
            }, {
                "name": "SortOperator",
                "size": 2023
            }]
        }, {
            "name": "Visualization",
            "size": 16540
        }]
    }]
}
javascript arrays object bigdata
2个回答
3
投票

使用ES2015:

const count = (item) => 1 + (item.children || []).map(count).reduce((a, b) => a + b, 0)

count(DATA) //=> 252

2
投票

使用递归。

function countObjects(obj) {
    // the current element is an object +1
    count = 1;
    // check if object has children
    if (Array.isArray(obj.children)) {
        // loop through children
        obj.children.forEach(child => {
            // count # of objects within each child and tally
            count += countObjects(child)
        });
    }
    return count;
}

console.log(countObjects(DATA));

(我最终得到252,这是{的数量)

© www.soinside.com 2019 - 2024. All rights reserved.