Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript来分割数据并计算总和_Javascript_Arrays_String_Split - Fatal编程技术网

JavaScript来分割数据并计算总和

JavaScript来分割数据并计算总和,javascript,arrays,string,split,Javascript,Arrays,String,Split,我相信我需要的是两个JavaScript函数。我收到一个逗号分隔的字符串,它包含两种类型的数据:1)设备名称后跟2)数值。这两个值用逗号分隔,每组值也用逗号分隔。下面的字符串示例: Device_A,5,Device_C,2,Device_A,10,Device_B,8,Device_B,2,Device_C,7 我想做的是创建两个独立的函数。第一个函数查找唯一的设备名称,并仅返回逗号分隔字符串中的名称。第二个函数将计算每个设备的数值总和。上述示例字符串的预期结果将返回: 功能1(设备列表):

我相信我需要的是两个JavaScript函数。我收到一个逗号分隔的字符串,它包含两种类型的数据:1)设备名称后跟2)数值。这两个值用逗号分隔,每组值也用逗号分隔。下面的字符串示例:

Device_A,5,Device_C,2,Device_A,10,Device_B,8,Device_B,2,Device_C,7
我想做的是创建两个独立的函数。第一个函数查找唯一的设备名称,并仅返回逗号分隔字符串中的名称。第二个函数将计算每个设备的数值总和。上述示例字符串的预期结果将返回:

功能1(设备列表):

功能2(每个设备列表的总和):

列表不需要以任何特定顺序返回,只要两者匹配即可。此时,我所成功完成的只是返回一个唯一值列表(包括数值)。。。我一直在分离列表,但仍然引用设备名称来汇总所有值

提前谢谢。如果你有任何问题,请告诉我!
Matt

您可以使用对象来收集姓名和计数

此编辑包含一个共享函数和两个相等顺序的结果函数

函数getGrouped(数据){
var数组=data.split(','),
temp=对象创建(空),
i=0;
while(i日志(getCounts(data))另一种方式是
regexs

让str=“设备A,5,设备C,2,设备A,10,设备B,8,设备B,2,设备C,7”,obj={} str.match(/(\w+,[0-9]+)/g).forEach((s)=>{ s=s.split(',') obj[s[0]=(obj[s[0]|||0)+(数字(s[1])||0) })
console.log(obj)
类似这样的东西应该可以:

var input=“设备A,5,设备C,2,设备A,10,设备B,8,设备B,2,设备C,7”;
var输出=输入。拆分(',')。减少((累加器、currentValue、currentIndex、数组)=>{
累加器[当前值]=(累加器[当前值]| 0)
+parseInt(数组[currentIndex+1]);
阵列拼接(0,1);
回流蓄能器;
}, {});
console.log(Object.keys(output));

log(Object.keys(output.map)(k=>output[k])当开始处理这样的问题时,我认为明智的做法是不要担心在一个循环中或在一个奇特的一行程序中开始

A)首先定义您需要的数据结构以及如何从一种格式转换到另一种格式:

  • 将我的数据字符串转换为键和值列表
  • 以某种方式根据键对这些键和值进行分组
  • 对每组的值求和
  • 返回所有唯一键的列表
  • 返回所有求和值的列表
B)然后,尝试查看您编写的任何代码是否有可能被应用程序的其他部分重新使用,并进行相应的重构

C)最后,评估是否存在性能瓶颈,只有存在瓶颈时,才进行性能优化

A.每个步骤的功能:
//1。从字符串到键和值数组
//你已经弄明白了。用“,”分开!
常量namesAndValuesFromString=
str=>str.split(“,”);
// 2. 按键分组
//让我们先配对:
const deviceValuePairs=devicesAndValues=>{
让pair=[];
常数对=[];
devicesAndValues.forEach(x=>{
对推(x);
如果(pair.length==2){
推(对);
配对=[];
}
});
返回对;
};
//键值对是构造分组对象的良好起点:
常数kvpsToDeviceValuesObj=kvps=>{
const valuesByDevice={};
kvps.forEach(([key,value])=>{
值=数字(值);
如果(!valuesByDevice[键]){
valuesByDevice[键]=[];
}
valuesByDevice[键]。推送(值);
});
返回值设备;
};
// 3. 现在,我们可以对数组中的值求和了
const sumValueArrays=valuesByDevice=>{
const summedValuesByDevice={};
//在对象条目上循环
Object.entries(valuesByDevice.forEach(
([键,值])=>{
summedValuesByDevice[键]=值
.减少((a,b)=>a+b);
}
);
返回summedValuesByDevice;
};
// 4. + 5.现在我们有了一个以设备ID为键的对象,并在其中求和了值,我们可以检索这两个列表
const getDevices=Object.keys;
const getSums=Object.values;
//运行代码:
常量名称和值=
名称和值来自字符串(“A,5,C,2,A,10,B,8,B,2,C,7”);
console.log(名称和值);
常量kvps=设备值对(名称和值);
console.log(kvps);
const valuesByDevice=kvpsToDeviceValuesObj(kvps);
控制台日志(valuesByDevice);
const sumValues=sumValueArrays(valuesByDevice);
console.log(sumValues);
const devices=getDevices(sumValues);
控制台日志(设备);
const sums=getSums(sumValues);

控制台日志(总和)我能够理解你所做的。然而,当我把它插入到我们的软件中时,我得到了以下错误:“应该是一个操作数,但是找到了常量。”在进一步研究之后,我看起来好像我们正在使用它。您认为在没有常量的情况下可以做到这一点吗?您可以用常规的var声明替换所有常量,而不会出现问题。这个错误听起来可能是另一个语法错误……你的猜测和我的一样好。我将所有常量都更改为常规变量,但现在我得到了“javax.script.ScriptException::9:6 Expected:but found pair”,它指的是let pair=[];行,我试着适应这个鳕鱼
Device_A, Device_B, Device_C
15,10,9