javascript - JavaScript 中的测验 : Convert into binary numbers, 覆盖数组

标签 javascript arrays function data-conversion binary-operators

我已经用 JavaScript 解决了以下测验,并在下面附上了测验和我的解决方案。 我觉得解决问题不对,因为我知道我错过了如何记忆功能! 谁能帮我用调用函数的方法把代码重写得更简单些? 或任何一种最简单的方法都是受欢迎的!

测验:

给定三个输入:两个长度相同的数组,包含十进制数和它们的长度数, 将两个数组中的数字转换为二进制数,如下所示:

01001
10100
11100
10010
01011

11110
00001
10101
10001
11100

然后,通过一个重叠另一个来组合两个数组,从每个数组中创建一个具有 1 的新数组, (1 覆盖 0),像这样:

11111
10101
11101
10011
11111

作为最后一步,在(# = 1, space = 0)条件下,将这个数组转换成#s-和空格的格式 最后,你应该得到这个作为输出 >

[ '#####', '# # #', '### #', '#  ##', '#####' ]

我的解决方案:

function solution(n, arr1, arr2) {
    var convArr1 = arr1.map(function(numten) {      
        return numten.toString(2);
    })
    var convArr2 = arr2.map(function(numten) {
        return numten.toString(2);
    })
    var newArr1 = convArr1.map(function(binNum) {
        if (binNum.length != n) {
            let zero = '0';
            for (let i = 1; i < n - binNum.length; i++) {
                zero = zero + 0;
            }
            binNum = zero + binNum;
            return binNum;
        } else {
            return binNum;
        }       
    })
    var newArr2 = convArr2.map(function(biNum) {
        if (biNum.length != n) {
            var zero = '0';
            for (let i = 1; i < n - biNum.length; i++) {
                zero = zero + '0';
            }
            biNum = zero + biNum;
            return biNum;
        } else {
            return biNum;
        }       
    })
    // console.log(newArr1, newArr2);
    var answer = ["", "", "", "", ""];
    var element = "";
    function compare(a, b) {
        for (var i = 0; i < a.length; i++) {
            if (a[i] === '1' || b[i] === '1') {
                answer[i] = answer[i] + '#';
            } else {
                answer[i] = answer[i] + ' ';
            }
        }
    }
    var compareArr = [];

    for (var i = 0; i < n; i++) {
        var numInArr1 = newArr1[i];
        var numInArr2 = newArr2[i];
        compare(numInArr1, numInArr2);
    }
    return answer;
}

console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]));

最佳答案

这里有一个更简单的解决方法:)

function solution(num, inputOne, inputTwo) {
  return Array(num).fill(0).map(function(un, index) {
    return (inputOne[index] | inputTwo[index]).toString(2).replace(/0/g, ' ').replace(/1/g, '#');
  });
}

console.log(solution(5, [9, 20, 28, 18, 11], [30, 1, 21, 17, 28]));

关于javascript - JavaScript 中的测验 : Convert into binary numbers, 覆盖数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46260833/

相关文章:

javascript - 等待使用 getCurrentPosition 达到准确度阈值

javascript - javascript 和 Elixir 中的 Y 组合器实现

ruby-on-rails - Ruby 嵌套数组迭代复杂度

function - 如何将此函数转换为使用尾调用

c++ - 函数和数组

c++ - 为什么 int 不能用作返回类型的左值,而用户定义的类可以?

javascript - 如何处理 uiwebview 内的 Javascript onorientationchange 事件

javascript - 监听来自另一个自定义元素的自定义事件

ios - 所有用户都可以访问和更改的最有效的数据存储方式

arrays - 使用 IFS 排列的 Bash 字符串