通过反转函数反转二维二进制数组,但这不起作用,

时间:2018-04-01 03:48:06

标签: javascript arrays

通过反转函数反转二维二进制数组,但在'if(){...}'之后函数不起作用

        function invert(arr){

                   for(let i=0;i<arr.length;i++)
                   {
                           for(let j=0;j<arr[i].length;j++) 
                           {
                               //     or   arr[i][j]=~arr[i][j] ?;
                            if(arr[i][j]==0)   //start inverting the arr
                            {

                                    //all above are right,but the following operation seems not working
                                    arr[i][j]=1;
                            }
                            else{
                                    arr[i][j]=0; 
                            }
                           }
                   }

                   console.log(arr);  //print the array 
                    return arr;
            } 

enter image description here

2 个答案:

答案 0 :(得分:2)

您似乎正在使用输入错误的函数。

您应该正确定义数组,因为您在问题标题中使用单词定义了数组。

在屏幕截图中,您会显示一些字符串\r等的一维数组,而不是二维数组['100101', ...]

如果你使用你的函数和正确的二维数组,其中元素确实只有1和0,那么你的函数对我来说工作正常。

例如:

[[1,0,0,1,0,1], ...]

答案 1 :(得分:2)

根据控制台输出中显示的内容,你的数组中没有二进制数,你有0和1的字符串 - 这不是一回事。

正如Pac0所建议的那样,您可以将数组转换为数字0和1的真正2D数组。或者,如果你想以字符串形式反转字符串,并假设字符串代表不超过8位的二进制数,你可以这样做:

arr.map(s => (~parseInt(s, 2) & 0xFF).toString(2))

或者,为了处理这个纯粹的字符串操作,匹配你想要使用的任意数量的位:

arr.map(s => s.replace(/[01]/g, b => b === '0' ? '1' : '0'))