Javascript 基于对象数组中的其他值计算对象数组中的值
我有一个这样的对象数组:Javascript 基于对象数组中的其他值计算对象数组中的值,javascript,jquery,arrays,object,ecmascript-6,Javascript,Jquery,Arrays,Object,Ecmascript 6,我有一个这样的对象数组: 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',
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}
];
我想用2020-05-01
从2020-05-03
中减去VAL,当站点
相同时,最后返回如下内容:
[
{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 === )
});
很抱歉,我真的不知道从这里到哪里去,这就是为什么我真的无法显示我尝试了什么。您可以使用嵌套循环来实现这一点。在第一个循环中循环相同的数组,检查两个对象是否具有相同的位置,然后减去值。可以将结果对象推入另一个数组并返回该数组
//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;
}