在一个程序以查找具有3个字符的字符串排列的程序中,程序日志中的变量与预期的值不同



在程序中找到具有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");

最新更新