如何在Javascript中从两个不同的数组中计算和创建新的对象值


var array1 = [{issueCount: 16, failCount: 38, id: 1},
{issueCount: 15, failCount: 37, id: 2},
{issueCount: 15, failCount: 34, id: 3}];
var array2 = [{id: 1, totalAttempts: 57},
{id: 2, totalAttempts: 59},
{id: 3, totalAttempts: 67},
{id: 4, totalAttempts: 59}];

我有两个数组。从上面的数组中,我需要使用(array1)来计算失败百分比。fail count/array2.totalAttempts) * 100 [id在两个数组之间是公共的]。最后一个数组的格式如下:

outputArray = [{id: 1, issueCount: 16, failCount: 38, percentage: 66.66},
{id: 2, issueCount: 15, failCount: 37, percentage: 62.71},
{id: 3, issueCount: 15, failCount: 34, percentage: 50.74}];

提前感谢。

您可以通过一个简单的for循环来实现这一点。

检查id是否存在于第二个数组中,如果存在则进行计算。

const array1 = [{issueCount: 16, failCount: 38, id: 1},
{issueCount: 15, failCount: 37, id: 2},
{issueCount: 15, failCount: 34, id: 3}];
const array2 = [{id: 1, totalAttempts: 57},
{id: 2, totalAttempts: 59},
{id: 3, totalAttempts: 67},
{id: 4, totalAttempts: 59}];
const outputArray = [];
array1.forEach(i1 => {
const i2 = array2.find(i => i.id === i1.id);
if(i2) {
outputArray.push({
id: i1.id, 
issueCount: i1.issueCount, 
failCount: i1.failCount,
percentage: (i1.failCount / i2.totalAttempts) * 100
}); 
}
});
console.log(outputArray)

你可以这样做:

const array1 = [{issueCount: 16, failCount: 38, id: 1},{issueCount: 15, failCount: 37, id: 2},{issueCount: 15, failCount: 34, id: 3}]
const array2 = [{id: 1, totalAttempts: 57},{id: 2, totalAttempts: 59},{id: 3, totalAttempts: 67},{id: 4, totalAttempts: 59}]
const mergedArrays = Object.values([...array1, ...array2].reduce((a, c) => (a[c.id] = { ...a[c.id], ...c }, a), {}))
const outputArray = mergedArrays
.filter(o => o.issueCount && o.totalAttempts)
.map(({ id, issueCount, failCount, percentage, totalAttempts }) => ({
id, 
issueCount, 
failCount,
percentage: Math.round(failCount / totalAttempts * 100 * 100) / 100
}))

console.log(outputArray)

感谢大家的贴子。我也找到了下面的解决方案。

outputArray = []; 
array1.forEach(function(dataItem1, idx) { 
var array2Items = array2[idx]; 
var outputItems = {}; 
if (dataItem1 && array2Items){
if(dataItem1.id == array2Items.id){ 
outputItems.id = dataItem1.id; 
outputItems.issueCount = dataItem1.issueCount; 
outputItems.failCount = dataItem1.failCount; 
outputItems.percentage = ((dataItem1.failCount/array2Items.totalAttempts)*100).toFixed(2); 
outputArray.push(outputItems); 
} 
}
});

console.log(outputArray);

最新更新