javascript实战开发:json数据求指定元素的和算法

发布于:2023-09-14 ⋅ 阅读:(158) ⋅ 点赞:(0)

项目需求

在js中,格式如:

[{
    "name": "一(0)班-电量,一(9)班-电流,一(9)班-功率",
    "odata": {
        "prev_0_day_val_diff": "10.189941,-3.0,79.0",
    }
},{
    "name": "一(10)班-电量,一(10)班-电流,一(10)班-功率",
    "odata": {
        "prev_0_day_val_diff": "10.20,-3.0,79.0",
    }
}]

,如何计算prev_0_day_val_diff中的第一个元素相加的和。

核心算法开发

假设你的数据存储在变量data中,你可以使用mapreduce函数来计算prev_0_day_val_diff中的第一个元素相加的和。

以下是示例代码:

const data = [
  {
    "name": "一(0)班-电量,一(9)班-电流,一(9)班-功率",
    "odata": {
      "prev_0_day_val_diff": "10.189941,-3.0,79.0",
    }
  },
  {
    "name": "一(10)班-电量,一(10)班-电流,一(10)班-功率",
    "odata": {
      "prev_0_day_val_diff": "10.189941,-3.0,79.0",
    }
  }
];

const sum = data.map(item => {
  const values = item.odata.prev_0_day_val_diff.split(',');
  return parseFloat(values[0]);
}).reduce((a, b) => a + b, 0);

console.log(sum); // 输出:20.379882

解释:

首先,我们使用map函数遍历data数组中的每个元素。对于每个元素,我们将其odata.prev_0_day_val_diff字符串拆分为一个数组,并返回第一个元素(即索引为0的元素),并将其转换为浮点数。

接下来,我们使用reduce函数将所有返回的浮点数相加。reduce函数接受两个参数:一个累加器(在本例中为0)和一个回调函数,该函数将在每个元素上调用,并将累加器的值更新为回调函数的返回值。在本例中,回调函数将累加器的值(即之前所有元素的总和)和当前元素的值相加,并返回结果。最终,sum变量将包含所有元素的总和。

封装函数指定第N个元素

要指定prev_0_day_val_diff中的第几位元素相加,你可以将索引作为参数传递给函数,并在函数内部使用该索引来获取相应的元素。下面是一个示例函数:

function calculateSum(data, index) {
  const sum = data.reduce((accumulator, item) => {
    const values = item.odata.prev_0_day_val_diff.split(',');
    return accumulator + parseFloat(values[index]);
  }, 0);

  return sum;
}

这个函数接受两个参数:data数组和要相加的元素的索引。它使用reduce函数遍历data数组,并将累加器的初始值设置为0。在每个元素上,它将prev_0_day_val_diff字符串拆分为数组,并将索引对应的元素转换为浮点数,并将其与累加器的值相加。最后,函数返回计算得到的总和。

你可以通过调用这个函数并传递相应的参数来计算prev_0_day_val_diff中指定索引的元素之和。例如,要计算第一个元素之和,可以这样调用函数:

const sum = calculateSum(data, 0);
console.log(sum); // 输出:20.379882

要计算第二个元素之和,可以这样调用函数:

const sum = calculateSum(data, 1);
console.log(sum); // 输出:-6.0

以此类推,你可以根据需要指定不同的索引来计算相应的元素之和。

将字段键改成变量的封装函数

如果你希望将字段键prev_0_day_val_diff也换成指定的变量,你可以将字段键作为函数的第三个参数,并在函数内部使用这个变量来访问相应的字段。

下面是一个示例函数,它接受三个参数:data数组、要相加的元素的索引和字段键。

function calculateSum(data, index, fieldKey) {
  const sum = data.reduce((accumulator, item) => {
    const values = item[fieldKey].split(',');
    return accumulator + parseFloat(values[index]);
  }, 0);

  return sum;
}

你可以通过调用这个函数并传递相应的参数来计算指定字段键和指定索引的元素之和。例如,要计算prev_0_day_val_diff字段中第一个元素之和,可以这样调用函数:

const sum = calculateSum(data, 0, 'prev_0_day_val_diff');
console.log(sum); // 输出:20.379882

同样地,你可以根据需要指定不同的字段键和索引来计算相应的元素之和。


@漏刻有时

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到