代码之家  ›  专栏  ›  技术社区  ›  stone rock

如何使用reduce()从javascript中的嵌套数据中提取信息?(ES6)

  •  0
  • stone rock  · 技术社区  · 6 年前

    我正在解析json数据并使用 batdata.reduce() 我想找出板球比赛中击球手出局的频率。所以我用 a 作为 accumulator how 作为 currentValue . 所以我会得到不同值的频率 怎样 (见上面的json数据链接)。

    当我试图 console.log(catches) . 我得到的频率如下: LBW: 20, CAUGHT: 69, DNB: 14, RUNOUT: 3 ...... 但在控制台上我也得到了 undefined:60 为什么呢?(见截图)

    J.S.

    import React, { Component } from 'react';
    import batdata from "./batdata";
    
    const catches = batdata.reduce( (a,{how})  =>{
        if(!a[how]){
            a[how]=1;
        }else{
            a[how]=a[how] + 1;
        }
    
        return a; 
    
    }, {});
    
    console.log(catches);
    

    截图:

    enter image description here

    1 回复  |  直到 6 年前
        1
  •  2
  •   Logar    6 年前

    如果您只想要Dimissal Hows,您可以:

    const catches = batdata.reduce( (a,{dismissal})  =>{
        a[dismissal.how] = !a[dismissal.how] ? 1 : a[dismissal.how] + 1;
        return a;
    }, {});
    

    现在,如果你想在不在场的情况下如何解雇,你可以:

    const catches = batdata.reduce( (a,{how, dismissal})  =>{
        if(typeof how === 'undefined')
            a[dismissal.how] = !a[dismissal.how] ? 1 : a[dismissal.how] + 1;
        else
            a[how] = !a[how] ? 1 : a[how] + 1
        return a; 
    }, {});