gpt4 book ai didi

javascript - 使用javascript数组减少给定的n个输入以产生m个输出

转载 作者:行者123 更新时间:2023-11-29 15:22:16 25 4
gpt4 key购买 nike

我有一系列的点,我想将它们变成一系列的线。

这是我希望代码执行的示例

[p1, p2, p3] -> [line1, line2]

每个循环:

(p1, p2) -> line
(p2, p3) -> line

执行此操作的标准方法是:

const triangle = [[0,0], [0,1], [1,2]]

const lines = []
for (let i = 1; i < triangle.length; ++i) {
const slope = findSlopeFromPoints(...triangle[i - 1], ...triangle[i])
const yIntercept = findYIntercept(...triangle[i], slope)
lines.push({
slope,
yIntercept
})
}

这是我可以使用 Array.prototype.reduce 获得的闭包。但感觉更难推理

const initial = {
array: [], // actual returned array we care about
lastPoint: null // "triangle[i - 1]"
}
const linesR = triangle.reduce( (lines, point) => {
if (lines.lastPoint === null)
return {
...lines,
lastPoint: point
}
else {
const slope = findSlopeFromPoints(...lines.lastPoint, ...point)
const yIntercept = findYIntercept(...point, slope)
lines.array.push({
slope,
yIntercept
})
lines.lastPoint = point
return lines

}
}, initial )

简而言之,有没有更好的方法使用reduce将N个输入组合成N - 1个输出?

最佳答案

当然,使用 currentIndex应用偏移量的参数。您的回调函数接收到的参数1 比您使用的要多:

[{x:0, y:0}, {x:0, y:1}, {x:1, y:2}].reduce((lines, point, currentIndex, source) => {
currentIndex < source.length -1 && lines.push({
from: point,
to: source[currentIndex + 1]
});
return lines;
}, []);

1参见Array.prototype.<a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce" rel="noreferrer noopener nofollow">reduce()</a>了解更多信息。

关于javascript - 使用javascript数组减少给定的n个输入以产生m个输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42653564/

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