【发布时间】:2018-02-25 21:37:36
【问题描述】:
我已经用 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]));
【问题讨论】:
标签: javascript arrays function data-conversion binary-operators