gpt4 book ai didi

javascript - 迭代 "looped"数组

转载 作者:行者123 更新时间:2023-12-01 00:50:10 25 4
gpt4 key购买 nike

假设我有一个像这样的数组:

let arr = [1,2,3....36,38,39]; //an array of 39 elements

标题中的'looped'指的是向前迭代数组时,迭代从arr[39]跳转到arr[0],并且从 arr[0]arr[39] 也是如此 - 本质上,数组是一个闭环。

在我的代码中,我交替迭代的方向,并且每个此类逐步执行的开始和结束索引都是预先确定的:

arr[0] //initial condition is always the same
arr[5]
arr[17]
arr[30]
arr[14]
etc.

我的问题是这样的 - 是否有一种简单的方法来确定哪种迭代方式“更短”,考虑到 arr[39] 和 arr[0] 之间的差距?

也就是说,当迭代位于 arr[35] 且下一条指令是转到 arr[2] 时,更接近于通过“间隙”,需要 6 步,而不是向后退 33 步。

最佳答案

如何使用 slice 方法来获取两个方向上的差异计数?它可能会很好地工作,因为您可以使用负数来计算“跳过间隙”时的项目数量,我假设您可能会沿任一方向遍历数组,因此您可以从类似 [2] -> [35][36] -> [35] 不一定总是向前。

function shortestPath (idx1, idx2, array) {
const min = Math.min(idx1, idx2);
const max = Math.max(idx1, idx2);

const straight = array.slice(min, max).length;
const looped = array.slice(max - array.length).length + array.slice(0, min).length;

return (straight < looped)
? 'straight' : 'jump the gap';
}

const array = new Array(40);
shortestPath(2, 35, array) // 'jump the gap'
shortestPath(35, 2, array) // 'jump the gap'
shortestPath(36, 35, array) // 'straight'
shortestPath(35, 36, array) // 'straight'

如果你给它的索引超出了 array.length 或负数等,我没有任何错误检查或任何东西......但这应该给你一个开始。它之所以有效,是因为 slice 允许您使用负数作为开头。所以 slice(-2) 说给我最后两项。这样,我们就可以抓取两个索引两侧的项目,然后将它们添加到一起,而不是抓取数组的中间。

关于javascript - 迭代 "looped"数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57049595/

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