gpt4 book ai didi

javascript - 以编程方式生成嵌套 for 循环

转载 作者:行者123 更新时间:2023-11-28 00:05:41 25 4
gpt4 key购买 nike

下划线 mixin 和下面的函数以两种不同的方式执行完全相同的操作,它们获取数组的所有对。我想知道如何创建一个函数(闭包?),它允许我传入我想要的数组项的“对”或分组,而不是嵌套 for 循环或 range-map每次。

getPairs: function(arr){
return _.chain(_.range(arr.length))
.map(function(setOne){
return _.chain(_.range(arr.length))
.map(function(setTwo){
return [
arr[setOne],
arr[setTwo],
]
})
.value()
})
.value()
}

function getPairs(arr){
var pairs = []
for(var i = 0; i < arr.length; i++){
for(var p = 0; p < arr.length; p++){
var pair = [
arr[i],
arr[p],
]
pairs.push()
}
}
return pairs
}

最佳答案

有趣的问题。为了得到一个简单的解决方案,我必须跳出框框思考。事实上,整个事情可以通过两个 for 循环和一些繁重的数学来完成。代码如下:

function getGroupings(arr, numPerGroup){
numPerGroup > 1 || (numPerGroup = 2);
var groups = Math.pow(arr.length, numPerGroup);
var groupings = [];
for (var i = 0; i < numPerGroup; i++) {
for (var j = 0; j < groups; j++) {
groupings[j] || groupings.push(Array(numPerGroup));
var index = Math.floor(j / Math.pow(arr.length, i)) % arr.length;
groupings[j][i] = arr[index];
if (i === numPerGroup - 1) groupings[j] = groupings[j].reverse();
}
}
return groupings;
}

关于其工作原理的一些说明:

  • 它为内部数组中的每个项目运行一次外部“for”循环,并为外部数组中的每个项目运行一次内部“for”循环。你可能会说,倒退了。
  • 内部“for”循环的工作方式有点像二进制时钟,其中(时钟值)===(我们要访问的传入数组的索引)。
  • 其中n =(传入数组的长度),每次都会在该位置增加时钟,一(n ^ 1)th为经常出现在 (n ^ 1) 的位置,是出现在 (n ^ 2) 位置的 (n ^ 2) 次' s 的位置,依此类推,直到 (n ^ num-per-group) 的位置。
  • 在最后一次迭代中,它会反转所有内部数组,实际上将一个的位置放在最后,将 (n ^ 1) 的位置放在倒数第二个位置,等等...不一定必要的,但会产生更预期的输出。

示例:

假设您有一个数组,var arr = [3, 6, 9],并且您想要获取 3 的所有可能分组--getGroupings(arr, 3);。实际的组数为arr.length ^ 3 = 27,因此该函数将生成一个包含27个数组的数组。

(忽略外部 for 循环 - 想象一下它的所有迭代同时发生)二进制时钟从 0 开始,因此第一个分组是 arr[0], arr[0] , arr[0]--[3, 3, 3]

在下一次迭代中,1 的位置前进一位 -arr[0], arr[0], arr[1]--[3, 3, 6],然后 [3, 3, 9]

接下来是 3 的位置前进并且 1 的位置重置的时候了 -arr[0], arr[1], arr[0],所以分组 4 是 [ 3, 6, 3]。依此类推,直到第 27 个数组 [9, 9, 9]

这是一个JSFiddle 。尝试一下!

关于javascript - 以编程方式生成嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362507/

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