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

如何为对象数组的现有键添加多个值?

  •  -2
  • stone rock  · 技术社区  · 6 年前

    我想用 reduce() 为了得到一个特定的小门的经济率。

    示例数据:

       var data = [
        {wicket:0, econ:20 },
        {wicket:1, econ:10 },
        {wicket:3, econ:45 },
        {wicket:0, econ:15 },
        {wicket:1, econ:32 }
    ]
    

    我想要 减少() 方法返回如下所示的对象数组:

    0: 20, 15
    1: 10, 32
    3: 45
    

    我试图用对象初始化累加器,但是 减少() 方法我无法计算如何使用 key value 作为 wicket values 作为 economy 是的。

    我的代码:

    const Economy = data.reduce( (a, {econ, wicket}) => {
    
                a[wicket].push(econ);           
    
        },{})
    

    我用上面的代码得到了未定义的行为。

    2 回复  |  直到 6 年前
        1
  •  3
  •   Zenoo    6 年前

    如果你的 data 本来是一个 Array 而不是一个 Object (这不是现在,至少不是有效的):

    let data = [
        {wicket:0, econ:20 },
        {wicket:1, econ:10 },
        {wicket:3, econ:45 },
        {wicket:0, econ:15 },
        {wicket:1, econ:32 }
    ];
    
    let result = data.reduce((acc, curr) => {
      if(acc[curr.wicket]) acc[curr.wicket].push(curr.econ);
      else acc[curr.wicket] = [curr.econ];
      return acc;
    },{});
    console.log(result);
        2
  •  1
  •   Eddie    6 年前

    可以使用 reduce 比如:

    var data = [{"wicket":0,"econ":20},{"wicket":1,"econ":10},{"wicket":3,"econ":45},{"wicket":0,"econ":15},{"wicket":1,"econ":32}];
    
    var result = data.reduce((c, v) => {
      c[v.wicket] = c[v.wicket] || []; //Initiate the property as empty array of it does not exist
      c[v.wicket].push(v.econ);
      return c;
    }, {});
    
    console.log(result);

    || 是或运算符。

    这意味着如果 c[v.wicket] 存在,它将分配给 C[维克特] 再一次。如果没有,则分配一个空数组 []

    c[v.wicket] = c[v.wicket] || [];