在 JavaScript 中顺序添加嵌套数组
Sequential addition of nested arrays in JavaScript
我试图在 javascript 中将 4 个嵌套数组与 9 个数值相加,但遇到了问题。它们当前存储为:x = [[Array1(9)], [Array2(9)], [Array3(9)], [Array4(9)]]
我想 "zip" 将它们放在一起并添加到过程中,因此将 Array1[0] 和 Array2-4[0] 添加到所有九个值中。因此,四个数组中的每一个都总结了它们的匹配 ID。
数组看起来像这样:
[1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5]
[0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]
翻译成:
[1.432、2.602 等...]
我似乎无法获得 x.map() 函数来按照我想要的方式将它们组合在一起。任何帮助将不胜感激。
谢谢,
您可以通过 Array.prototype.reduce()
and loop through nested arrays one by one with Array.prototype.forEach()
将嵌套数组项添加到结果数组的相应项来遍历外部数组:
const src = [[1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5], [0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]]
result = src.reduce((r,a) => (a.forEach((n,j) => r[j] = (r[j]||0)+n), r),[])
console.log(result)
.as-console-wrapper{min-height:100%;}
对外部和内部数组使用 for each
let arr1 =[ [1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5],
[0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]]
let arr2=[];arr1.forEach( (arr)=> arr.forEach((innerArr,index)=>{
if(!arr2[index])arr2[index]=0;arr2[index]=arr2[index]+innerArr;
}));
console.log(arr2);
使用第一个数组进行映射,将其他3个数组的对应值添加到每个值。您可以为任意长度的数组创建一个函数(请参阅代码段中的 sumArrays
)
const arrays = getData();
let sums = arrays[0].map( (v, i) => v + arrays[1][i] + arrays[2][i] + arrays[3][i] );
let sums2 = sumArrays(arrays);
console.log(sums);
console.log(sums2);
function sumArrays(arrays) {
const checkLengthEquality = () => {
let cando = arrays.map(v => v.length);
return Math.max.apply(null, cando) === Math.min.apply(null, cando);
};
if (!checkLengthEquality()) {
throw Error("Arrays not of equal length");
}
const sum = (v, i) => {
let len = arrays.length;
while(len-- > 1) {
v += arrays[len][i];
}
return v;
};
return arrays[0].map( (v, i) => sum(v, i) );
}
function getData() {
return [
[1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5],
[0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024],
[3.1, 2, 4.3, 3.8, 1.5, 6.5, 95, 1.5, 2.5],
[12, 1, 1.3, 8, 5.3, 6.2, 5, 1, 2.3]
];
}
.as-console-wrapper { top: 0; max-height: 100% !important; }
我试图在 javascript 中将 4 个嵌套数组与 9 个数值相加,但遇到了问题。它们当前存储为:x = [[Array1(9)], [Array2(9)], [Array3(9)], [Array4(9)]]
我想 "zip" 将它们放在一起并添加到过程中,因此将 Array1[0] 和 Array2-4[0] 添加到所有九个值中。因此,四个数组中的每一个都总结了它们的匹配 ID。 数组看起来像这样:
[1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5]
[0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]
翻译成:
[1.432、2.602 等...]
我似乎无法获得 x.map() 函数来按照我想要的方式将它们组合在一起。任何帮助将不胜感激。
谢谢,
您可以通过 Array.prototype.reduce()
and loop through nested arrays one by one with Array.prototype.forEach()
将嵌套数组项添加到结果数组的相应项来遍历外部数组:
const src = [[1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5], [0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]]
result = src.reduce((r,a) => (a.forEach((n,j) => r[j] = (r[j]||0)+n), r),[])
console.log(result)
.as-console-wrapper{min-height:100%;}
对外部和内部数组使用 for each
let arr1 =[ [1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5],
[0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024]]
let arr2=[];arr1.forEach( (arr)=> arr.forEach((innerArr,index)=>{
if(!arr2[index])arr2[index]=0;arr2[index]=arr2[index]+innerArr;
}));
console.log(arr2);
使用第一个数组进行映射,将其他3个数组的对应值添加到每个值。您可以为任意长度的数组创建一个函数(请参阅代码段中的 sumArrays
)
const arrays = getData();
let sums = arrays[0].map( (v, i) => v + arrays[1][i] + arrays[2][i] + arrays[3][i] );
let sums2 = sumArrays(arrays);
console.log(sums);
console.log(sums2);
function sumArrays(arrays) {
const checkLengthEquality = () => {
let cando = arrays.map(v => v.length);
return Math.max.apply(null, cando) === Math.min.apply(null, cando);
};
if (!checkLengthEquality()) {
throw Error("Arrays not of equal length");
}
const sum = (v, i) => {
let len = arrays.length;
while(len-- > 1) {
v += arrays[len][i];
}
return v;
};
return arrays[0].map( (v, i) => sum(v, i) );
}
function getData() {
return [
[1, 2, 4, 3.6, 1.05, 4.65, 1.95, 0.5, 2.5],
[0.432, 0.602, 1.29, 1.146, 0.558, 1.43, 0.686, 0.178, 1.024],
[3.1, 2, 4.3, 3.8, 1.5, 6.5, 95, 1.5, 2.5],
[12, 1, 1.3, 8, 5.3, 6.2, 5, 1, 2.3]
];
}
.as-console-wrapper { top: 0; max-height: 100% !important; }