在程序中找到具有3个字符的字符串排列,程序日志中的变量与预期的值不同?可变PX的登录方式有所不同,但是当将其推入数组时,它总是以[B"," A"," C"]输出?
程序以查找具有3个字符的字符串的置换
function perm(str) {
var str = str.split('');
var res = []
var bag = []
for (i = 0; i < str.length; i++) {
n = 1;
var px = str;
for (j = 1; j < 3; j++) {
if (j == 1) {}
if (j == 2) {
var tempx = px[1];
var tempy = px[2];
px[1] = tempy;
px[2] = tempx;
}
console.log(px)
bag.push(px)
}
if (i < (str.length - 1)) {
tempa = str[0];
tempb = str[0 + 1];
str[0 + 1] = tempa;
str[0] = tempb;
}
}
console.log(bag);
}
perm("abc");
JS具有原始类型(如数字,字符串,布尔值)和对象。当原始值按值保存时,对象类型通过参考保存。例如,
var obj = {
a: "Hello",
b: 2
};
console.log(obj); // {a: "Hello", b: 2};
var ref = obj;
console.log(obj) // {a: "Hello", b: 2};
obj.a = "new string";
ref.b = -1;
// The output will be the same, because objects save by reference.
console.log(obj); // {a: "new string", b: -1}
console.log(ref); // {a: "new string", b: -1}
您使用px
数组创建了相同的错误(Ref也保存数组)。为了解决此问题,您应该在此循环for (j = 1; j < 3; j++)
中每次创建px
数组修复了片段。
function perm(str){
//var str=str.split('');
var res=[]
var bag=[]
for(i=0;i<str.length;i++){
n=1;
for(j=1;j<3;j++){
var px=str.split('');
if(j==1){
}
if(j==2){
var tempx=px[1];
var tempy=px[2];
px[1]=tempy;
px[2]=tempx;
}
console.log(px)
bag.push(px)
}
if(i<(str.length-1)){
tempa=str[0];
tempb=str[0+1];
str[0+1]=tempa;
str[0]=tempb;
}
}
console.log(bag);
}
perm("abc");