在javascript中向生成的所有数字组合列表中添加两个副本
我资助了一个函数来创建一个列表,列出我所有可能的价值观组合。我只希望能够将第一个和第二个值复制到第三个和第四个位置在javascript中向生成的所有数字组合列表中添加两个副本,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我资助了一个函数来创建一个列表,列出我所有可能的价值观组合。我只希望能够将第一个和第二个值复制到第三个和第四个位置 function cartesian() { var r = [], arg = arguments, max = arg.length-1; function helper(arr, i) { for (var j=0, l=arg[i].length; j<l; j++) { var a = arr.slice(0)
function cartesian() {
var r = [], arg = arguments, max = arg.length-1;
function helper(arr, i) {
for (var j=0, l=arg[i].length; j<l; j++) {
var a = arr.slice(0); // clone arr
a.push(arg[i][j]);
if (i==max)
r.push(a);
else
helper(a, i+1);
}
}
helper([], 0);
return r;
}
var c = cartesian([0.1,0.2], [0.1,0.2],[0.8],[0.8],[0.7]);
笛卡尔函数(){
var r=[],arg=参数,max=arg.length-1;
功能助手(arr,i){
对于(var j=0,l=arg[i].length;j您所说的相当于将第一个/第二个位置向后推,复制并推到数组的开头。所以您可以只使用slice(begin,end)
或将它们添加到数组的开头,如图所示
const data=[0.1,0.2,0.8,0.8,0.7];
常量映射=[…data.slice(0,2),…data];//或[data[0],data[1],…data];
console.log(映射);
//用法
常数c=笛卡尔([0.1,0.2],[0.1,0.2],[0.8],[0.8],[0.7])。映射((arr)=>[arr[0],arr[1],…arr]);
//还是这个
const c=cartesian([0.1,0.2],[0.1,0.2],[0.8],[0.8],[0.7]).map((arr)=>[…arr.slice(0,2),…arr]);
如何将切片添加到笛卡尔函数中?此函数必须创建数百种不同的组合,这里,我刚刚提供了一个示例列表。再次感谢。更新了答案。您可以使用map()
如图所示。如果您知道要确定,只需克隆2个值,我将使用第一个选项。它避免了切片/解构切片数组。