Javascript 如何将数字列表转换为两个数字的唯一对
我需要将一个长度未知的随机整数数组转换为多对2 例:Javascript 如何将数字列表转换为两个数字的唯一对,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我需要将一个长度未知的随机整数数组转换为多对2 例: var数字=[1,5,0,7,5,5,1,7,5,1,2,1]; ----------------------------------------------------- [[1, 5], [0, 7], [5, 5], [1, 7], [5, 1], [2, 1]] 需要遵循一些约束条件,例如: 应该正好有6对(每对2个数字) 如果numbers数组中没有足够的数字组成6对,则生成一个介于1-9之间的数字 数字数组中的每个项目只能使用
var数字=[1,5,0,7,5,5,1,7,5,1,2,1];
-----------------------------------------------------
[[1, 5], [0, 7], [5, 5], [1, 7], [5, 1], [2, 1]]
需要遵循一些约束条件,例如:
- 应该正好有6对(每对2个数字)
- 如果
数组中没有足够的数字组成6对,则生成一个介于1-9之间的数字numbers
数组中的每个项目只能使用一次数字
- 每对都必须是唯一的。但是,例如
和[1,2]
可以视为不同的对[2,1]
- 一对不能包含
[0,0]
var数字=[1,5,0,7,5,5,1,7,5,1,2,1];
函数p(t,i){
如果(t.length==2){
结果:推(t);
返回;
}
如果(i+1>数字.长度){
返回;
}
p(t.concat(数[i]),i+1);
p(t,i+1);
}
var结果=[];
p([],0);
控制台日志(结果);
下一步该怎么办?您可以进行一些循环,一个用于检查结果集的长度,一个用于检查是否有
数组
的可用值,并添加值以获取下一对,并检查该对之前是否见过
如果没有,则将该对添加到结果集中并继续
var getRandomN=n=>()=>Math.floor(Math.random()*n)+1,
getRandom=getRandomN(9),
数组=[1,5,0,7],
SEED=新集合(['0 | 0']),
长度=6,//指定所需的长度
结果=[],
i=0,
一对
while(result.length
.as console wrapper{max height:100%!important;top:0;}
虽然OP只需要未知长度数组中的前N对可能是正确的,但这里有一个额外的检查(和解决该问题的一种稍微不同的方法):
constnums1=[1,5,0,7,5,5,1,7,1,5,1,5];
常量nums2=[1,5,0,7,5,5,1,7,5,1,2,1];
常量nums3=[1,5,0,7,5,5,0,0,5,1,2,1,0,0,1,8];
常量nums4=[1,5,0,7,1,6,5,5,0,0,5,8,8,5,5,1,2,1,0,0,1,8];
const log=pairs=>console.log(JSON.stringify(pairs));
日志(createPairs(nums1,6));
日志(createPairs(nums2,6));
日志(createPairs(nums3,6));
日志(createPairs(nums4,5));
日志(createPairs(nums4,5,true));
函数createPairs(数字、len、truncate){
让配对=[];
设i=0;
const existingValues=新集合(['0 | 0']);
const randomDigit=n=>Math.floor(Math.random()*(n+1));
//创建并完成[len]唯一对的数组,而不是[0,0]
while(pairs.length const pair=i+2如何生成随机数?使用Math.random(),一个介于1-9之间的数字。谢谢你,尼娜,你能给这些行添加一些注释吗。我很想了解循环中发生了什么。嗨,尼娜,你的代码将在结果中返回[0,0]
-值,可以使用seen=new Set规避这些值(['0 | 0']),
同样,它会将更长的数组像[[1,5],[0,7],[1,6],[5,5],[5,8],[8,5],[5,1],[2,1]
剪切到长度,这可能不是期望的结果;)op只需要6对。但是op需要前6对吗?请解释你的答案。这个代码更接近我想要的,谢谢。
var numbers = [1, 5, 0, 7, 5, 5, 1, 7, 5, 1, 2, 1];
var arr = [];
numbers.forEach(function (x, i) {
if(i % 2) {
arr[arr.length-1][1] = x;
console.log(arr[arr.length-1]);
}
else {
arr.push([x, null]);
}
});
console.log(arr.join("#"));