【问题标题】:Calculate values in array of objects based on other values in array of objects根据对象数组中的其他值计算对象数组中的值
【发布时间】:2021-08-17 18:44:02
【问题描述】:

我有一个这样的对象数组:

    let data = [
    {date:'2020-05-01', device: 'iphone',   site: 'google', val1:10, val2:20, val3:30},
    {date:'2020-05-01', device: 'iphone',   site: 'bing',   val1:23, val2:12, val3:14},
    {date:'2020-05-01', device: 'iphone',   site: 'jeeves', val1:67, val2:78, val3:12},
    {date:'2020-05-03', device: 'iphone',   site: 'google', val1:10, val2:20, val3:30},
    {date:'2020-05-03', device: 'iphone',   site: 'bing',   val1:23, val2:12, val3:14},
    {date:'2020-05-03', device: 'iphone',   site: 'jeeves', val1:67, val2:78, val3:12}
    ];

site 相同时,我想用2020-05-012020-05-03 中减去vals,最后返回类似:

    [
    {device: 'iphone',   site: 'google', val1:-5, val2:5, val3:15},
    {device: 'iphone',   site: 'bing',   val1:10, val2:-10, val3:53},
    {device: 'iphone',   site: 'jeeves', val1:10, val2:21, val3:13},
    ]

我试图做一个forEach,但我不确定从那里去哪里以及如何编写一个函数以使其更可重用:

    
    data.forEach(d => {
        if (d.data === )
    });

对不起,我真的不知道从这里去哪里,这就是为什么我真的无法展示我尝试过的东西。

【问题讨论】:

    标签: javascript jquery arrays object ecmascript-6


    【解决方案1】:

    您可以使用嵌套循环来实现这一点。在第一个循环中循环遍历相同的数组并检查两个对象是否具有相同的站点然后减去值。您可以将结果对象推入另一个数组并返回该数组。

        //in your case it will be like this:
        const SubtractValues = (data) => {
          let resultarr = [];  
          data.forEach(d => {
                data.forEach(d2 => {
                  //if both objects have same site and they are not the same object
                  if(d2.site == d.site && d != d2){
                    let result = {device: d.device, site: d.site, val1: d2.val1 - d.val1, val2: d2.val2 - d.val2, val3: d2.val3 - d.val3}
                    //if result with same site is not already present in the results array
                    if(!(resultarr.some(item => item.site === result.site))){
                      resultarr.push(result)
                    }
                  }
                })
            });
          return resultarr;
        }
    

    【讨论】:

      猜你喜欢
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 2021-03-21
      • 2020-10-14
      • 2020-12-14
      • 1970-01-01
      • 2018-11-23
      相关资源
      最近更新 更多