【问题标题】:Use function argument inside reduce function : Javascript在reduce函数中使用函数参数:Javascript
【发布时间】:2019-11-29 16:17:12
【问题描述】:

我有一个具有以下结构的对象数组作为响应发送:


    let sampleData = [
      { valueObj: { High: 4, Low: 5,  Medium: 7 } , time: "1571372233234" , sum: 16 },
      { valueObj: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234" , sum: 9},
      { time: "14354545454", sum: 0},
      { time: "14354545454", sum: 0} }
    ];


我需要获取数组内每个对象中的每个键并从中形成一个数组。基本上基于所有对象中存在的键进行分组。如果对象没有“值”,它应该在 val1,val2,val3 中返回 0。

result = [
  { name: 'High', data: [4, 5, 0, 0] }, 
  { name: 'Medium', data: [5, 3, 0, 0] }, 
  { name: 'Low', data: [7, 1, 0, 0] }
]

只是想将一个参数传递给一个函数,它应该在 reduce 中使用。在这里,我传递了“valueObj”,应该在 reduce 中使用。但我无法在 reduce 中引用相同的内容

我尝试了以下方法:

let sampleData = [{ valueObj: { High: 4, Low: 5,  Medium: 7 }, time: "1571372233234", sum: 16 }, { valueObj: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234", sum: 9 }, { time: "14354545454", sum: 0 }, { time: "14354545454", sum: 0 }];

let keys = ['High', 'Low', 'Medium'];

function formResult(sampleData, values, keys){
   let grouped = sampleData.reduce((r, { values = {} } = {}) => {
       r.forEach(({ name, data }) => data.push(values[name] || 0));
       return r;
   }, keys.map(name => ({ name, data: [] })));
   console.log(grouped);
}

formResult(sampleData,"valueObj", keys)

【问题讨论】:

    标签: javascript ecmascript-6


    【解决方案1】:

    重命名values 参数(我使用过prop),因为它在reduce 函数中使用。使用destructuring with computed properties提取属性并将其分配给values

    const sampleData = [{ valueObj: { High: 4, Low: 5,  Medium: 7 }, time: "1571372233234", sum: 16 }, { valueObj: { High: 5, Low: 3, Medium : 1 }, time: "1571372233234", sum: 9 }, { time: "14354545454", sum: 0 }, { time: "14354545454", sum: 0 }];
    
    const keys = ['High', 'Low', 'Medium'];
    
    function formResult(sampleData, prop, keys){
      let grouped = sampleData.reduce((r, { [prop]: values = {} } = {}) => {
        r.forEach(({ name, data }) => data.push(values[name] || 0));
        
        return r;
      }, keys.map(name => ({ name, data: [] })));
      console.log(grouped);
    }
    
    formResult(sampleData,"valueObj", keys);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-14
      • 2021-12-14
      • 2013-11-04
      • 1970-01-01
      • 2016-07-09
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多