gpt4 book ai didi

javascript - 查找数组中元素的所有组合

转载 作者:行者123 更新时间:2023-11-30 08:03:18 25 4
gpt4 key购买 nike

我要解决的问题是我想生成一个数组来表示源数组中元素的所有组合。

给定 2 个项目的输入,有 4 种组合(此处表示为二进制)

Group 1 | 0 | 1 | 0 | 1
Group 2 | 0 | 0 | 1 | 1
--------------------------
&Result | 0 | 1 | 2 | 3

这可以概括为组合数为 2(组数)(因此 3 组有 8 种组合,4 组有 16 种组合,依此类推)。

所以问题是;给定一个 javascript 数组:

var groups = [
{
name:"group1",
bit: 1
},
{
name:"group2",
bit: 2
},
{
name:"group3",
bit: 4
}];

我需要生成一个数组,其中索引表示 bit 属性的与运算,并且数组的值是任意的(进一步计算 - 不相关)所以让我们把它做成一个数组组名称(出于此问题的目的)。这个结果是可取的:

var result = [
{groups: []}, //0
{groups: ["group1"]}, //1
{groups: ["group2"]}, //2
{groups: ["group1","group2"]}, //3
{groups: ["group3"]}, //4
{groups: ["group1","group3"]}, //5
{groups: ["group2","group3"]}, //6
{groups: ["group1","group2","group3"]} //7
]

您可以在评论中看到,数组中的每个索引都代表原始 bit 属性的操作。

我准备了一个jsfiddle输入和所需的输出应该有助于回答问题。


This is my current solution , 基于 mellamokb's answer但以我喜欢的风格重写。我希望有一个更优雅的解决方案,因为这对数组有很多不必要的迭代。有更好的解决方案吗?

var resultCount = Math.pow(2,groups.length);
var result = [];
for(var i=0;i<resultCount;i++){
result.push({
groups: $.map(groups, function(e,idx){
return ((i & Math.pow(2,idx)) != 0)
? e.name
: null
})
});
}

最佳答案

这是一个相对有效的解决方案,它通过索引构建数组:

var result = [];
var resultCount = Math.pow(2, groups.length);

for (var i = 0; i < resultCount; i++) {
result[i] = { groups: [] };
for (var g = 0; g < groups.length; g++) {
if (i & groups[g].bit) result[i].groups.push(groups[g].name);
}
}

演示:http://jsfiddle.net/7ZsHL/9/

关于javascript - 查找数组中元素的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771145/

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