javascript变量不一致地接收函数的输出
需要一点帮助,我有一个等于函数的变量,有时它无法解析,我无法确定原因。代码应该写入一对名称,array.slice应该慢慢地将数组配对,同时我也会缩小随机数以适应数组的大小。我希望有人会告诉我,我遗漏了一些明显的东西。 编辑:上述代码中的d和e为50/50,或者等于数组中的名称,或者等于零。这是我无法确定的javascript变量不一致地接收函数的输出,javascript,Javascript,需要一点帮助,我有一个等于函数的变量,有时它无法解析,我无法确定原因。代码应该写入一对名称,array.slice应该慢慢地将数组配对,同时我也会缩小随机数以适应数组的大小。我希望有人会告诉我,我遗漏了一些明显的东西。 编辑:上述代码中的d和e为50/50,或者等于数组中的名称,或者等于零。这是我无法确定的 var familymembers=[“弗兰克”、“托德”、“比尔”、“珍妮丝”、“马可”、“蒂莉”、“蒙克”、“弗朗西斯科”、“詹姆斯”、“比尔”、“加里”]; var selected
var familymembers=[“弗兰克”、“托德”、“比尔”、“珍妮丝”、“马可”、“蒂莉”、“蒙克”、“弗朗西斯科”、“詹姆斯”、“比尔”、“加里”];
var selectedfamilymembers=familymbers;
var itemlength=(familymembers.length);
var m=家庭成员[1];
var n=选定的家庭成员[1];
控制台日志(m);
控制台日志(n);
函数选择器(array1,array2){
让d;
让f;
对于(变量i=array1.length-1;i>=0;i--){
console.log(itemlength);
a=随机化器(itemlength);
b=随机化器(itemlength);
//控制台日志(a);
//控制台日志(b);
d=(移除器(a,家庭成员));
e=(删除程序(b,选定的家庭成员));
console.log(“d=”+d);
console.log(“e=“+e”);
//阵列1.拼接(a,1);
//控制台日志(array1);
//阵列2.拼接(b,1);
//控制台日志(array2);
itemlength=itemlength-1;
控制台日志(d+“->”+e);
}
}
函数移除器(selectedspace,array){
console.log(“所选号码为”+selectedspace);
返回数组.拼接(selectedspace,1);
}
函数随机化器(rnumber){
返回值(Math.floor(Math.random()*rnumber));
}
christmasselector(家庭成员、选定家庭成员)代码>我认为您正在使用两个不同的引用操作同一个数组,您需要克隆familymembers,然后再将其分配给selectedfamilymembers,这就是我使用var selectedfamilymembers=[…familymembers]所做的
var familymembers=[“弗兰克”、“托德”、“比尔”、“珍妮丝”、“马可”、“蒂莉”、“蒙克”、“弗朗西斯科”、“詹姆斯”、“比尔”、“加里”];
var selectedfamilymembers=[…familymembers];
var itemlength=(familymembers.length);
var m=家庭成员[1];
var n=选定的家庭成员[1];
控制台日志(m);
控制台日志(n);
函数选择器(array1,array2){
让d;
让f;
对于(变量i=array1.length-1;i>=0;i--){
console.log(itemlength);
a=随机化器(itemlength);
b=随机化器(itemlength);
//控制台日志(a);
//控制台日志(b);
d=(移除器(a,家庭成员));
e=(删除程序(b,选定的家庭成员));
console.log(“d=”+d);
console.log(“e=“+e”);
//阵列1.拼接(a,1);
//控制台日志(array1);
//阵列2.拼接(b,1);
//控制台日志(array2);
itemlength=itemlength-1;
控制台日志(d+“->”+e);
}
}
函数移除器(selectedspace,array){
console.log(“所选号码为”+selectedspace);
返回数组.拼接(selectedspace,1);
}
函数随机化器(rnumber){
返回值(Math.floor(Math.random()*rnumber));
}
christmasselector(家庭成员、选定家庭成员)代码>数组是JavaScript中的引用类型。当您拼接选定的家族成员时,也会拼接家族成员
发件人:
这意味着,如果将数组赋给变量或将数组传递给函数,则复制或传递的是对原始数组的引用,而不是数组的值
像这样试试
var familymembers = ["Frank", "Todd", "Bill", "janice", "marco", "tilly", "monk", "francisco", "james", "bill", "gary"];
var selectedfamilymembers = familymembers.concat();
// var selectedfamilymembers = [...familymembers]; this also works
// var selectedfamilymembers = familymembers.slice(); this also works
var itemlength = familymembers.length;
function christmasselector (array1, array2){
let d;
let f;
for (var i = array1.length - 1; i >= 0; i--){
console.log(itemlength);
a = randomizer(itemlength);
b = randomizer(itemlength);
d = (remover(a, familymembers));
f = (remover(b, selectedfamilymembers));
itemlength = itemlength - 1;
console.log(d + " -> " + f);
}
}
function remover(selectedspace, array){
console.log("The selected number is " + selectedspace);
return array.splice(selectedspace, 1);
}
function randomizer(rnumber){
return (Math.floor(Math.random() *rnumber));
}
christmasselector (familymembers, selectedfamilymembers);
您可以使用调试器,在开始处停止,然后逐步完成代码。