gpt4 book ai didi

javascript - 从数组中消除项目以达到固定长度 - JavaScript

转载 作者:行者123 更新时间:2023-12-05 04:41:08 25 4
gpt4 key购买 nike

我正在尝试编写一个 JavaScript 函数,从数组中删除项目以达到定义的长度。该函数应该通过数组均匀地消除“间隙”。我需要这个函数来简化 Canvas 绘图的多边形顶点。

它应该是这样工作的:

enter image description here

这是我想出的代码:

function simplify(array, vertices) {

// Calculate gap size
var gap = array.length - vertices;
gap = Math.floor(array.length / gap);

var count = 0;
var result = [];

// Fill a new array
for (var i = 0; i < array.length; i++) {
if (count == gap) {
count = 0;
} else {
result.push(array[i]);
count++;
}
}

// Eliminate 1 item in the middle if length is odd
if (result.length > vertices) {
result.splice(Math.floor(result.length / 2), 1);
}
return result;
}

// This gives the wrong result depending on the length of the input!
// The result should be an array with the length of 3
console.log(simplify([
{ x: 10, y: 20 },
{ x: 30, y: 40 },
{ x: 40, y: 50 },
{ x: 50, y: 60 }
], 3))

然而,这似乎只是有时有效,问题可能出在数学上。可以实现此目的的算法是什么,或者我做错了什么?

最佳答案

也许这会 help

假设您有一个长度为 n 的字符串,并且您希望它的长度为 m。您有 n-2 个元素可供选择,m-2 个元素可供选择用于您的新数组。现在,假设您当前选择了 i 个元素并传递了 j 个元素。如果 i/j < (m-2)/(n-2) 那么你落后了。你可能应该采取另一个元素。对于最大均匀选择,您真正想知道的是 (i+1)/(j+1) 或 i/(j+1) 是否更接近您的目标 (m-2)/(n-2 ).如果溢出不是问题,你可以做一点代数来弄清楚这是否等同于 (i+1)(n-2) - (j+1)(m-2 ) 大于或小于 (n-2)/2; more 意味着 i 更好(所以不要拿这个),而 less 意味着 i+1 更好。

关于javascript - 从数组中消除项目以达到固定长度 - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70139230/

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