gpt4 book ai didi

javascript - 平均二维数组中的连续值对

转载 作者:搜寻专家 更新时间:2023-11-01 05:19:20 25 4
gpt4 key购买 nike

我正在尝试对二维数组中的连续整数对取平均值。

例如如果起始数组如下所示:

[
[1, 2, 3, 4, 5, 6],
[10, 20, 30, 40, 50, 60]
];

结果数组应该是这样的:

[
[1.5, 3.5, 5.5],
[15, 35, 55]
]

我的方法是依次遍历每个数组,使用 %2 选择所有其他值,将它们加在一起,然后推送到一个新的二维数组。

任何人都可以指导为什么实际结果是:

[
[1.5, 3.5, 5.5, 15, 35, 55],
[1.5, 3.5, 5.5, 15, 35, 55]
]

这是我的代码:

var data = [
[1, 2, 3, 4, 5, 6],
[10, 20, 30, 40, 50, 60]
];

//create the same number of empty arrays as there are arrays in data.
var averagedCols = new Array(data.length).fill([]);

for (var i = 0; i < data.length; i++) {
for(var j = 0; j < data[i].length; j++) {
if (j%2 === 0) {
var average = (data[i][j] + data[i][j+1])/2;
averagedCols[i].push(average);
}
}
}
console.log(averagedCols);

https://jsbin.com/rogemonave/edit?js,console

注意:当我尝试打印整个结果数组时,jsbin 也会打印 [circular object Array],但快速谷歌似乎说这是 jsbin 的问题,而不是我的代码,因为这不是发生在我的电脑上。不过,我的代码仍然可能存在问题。

最佳答案

您的原始代码的问题在于,当您执行 .fill([]) 时,您将填充同一个空数组的多个引用 - 只有内存中的一个空数组,averagedCols 的每个索引都指向该数组。您可以通过使用 Array.from 在每次迭代中显式创建数组来解决此问题:

var data = [
[1, 2, 3, 4, 5, 6],
[10, 20, 30, 40, 50, 60]
];

//create the same number of empty arrays as there are arrays in data.
var averagedCols = Array.from(
{ length: data.length },
() => []
);

for (var i = 0; i < data.length; i++) {
for(var j = 0; j < data[i].length; j++) {
if (j%2 === 0) {
var average = (data[i][j] + data[i][j+1])/2;
averagedCols[i].push(average);
}
}
}
console.log(averagedCols);

最好只在用 基元 填充数组时使用 .fill - 对于非基元(对象、数组和函数),使用 Array.from 代替。

如果您首先将数组项分成几对,逻辑可能会更简单,例如 [1, 2, 3, 4, 5, 6][[1, 2] , [3, 4], [5, 6]]。然后,您只需要一个简单的 .map 来计算每对的平均值:

function toPairs(arr) {
const pairs = [];
for (let i = 0; i < arr.length; i += 2) {
pairs.push(arr.slice(i, i + 2));
}
return pairs;
}

const input = [
[1, 2, 3, 4, 5, 6],
[10, 20, 30, 40, 50, 60]
];
const output = input
.map(toPairs)
.map(arrayOfPairs => arrayOfPairs.map(pair => (pair[0] + pair[1]) / 2));
console.log(output);

关于javascript - 平均二维数组中的连续值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com