问题陈述是,我应将5以下的任何数字替换为0,并将5以上的任何数字替换为1。
我正在尝试重新分配值,但没有影响,为什么?
function fakeBinary(n) {
let numbersArr = n.split('');
numbersArr.forEach(num => {
if(Number(num) < 5) {
num = '0';
} else if(Number(num) >= 5) {
num = '1';
}
});
return numbersArr.join('');
}
console.log(fakeBinary('3457'));Run Code Online (Sandbox Code Playgroud)
我除了的输出0011,但实际输出是3457。
forEach不会为原始值带来元素的引用,而是为您带来案例值的副本。您可以通过索引轻松地手动访问它,但是:
function fakeBinary(n) {
let numbersArr = n.split('');
numbersArr.forEach((num, i) => {
// ^--- note that `i` is brought and used below to access the element at index [i].
if(Number(num) < 5) {
numbersArr[i] = '0';
} else if(Number(num) >= 5) {
numbersArr[i] = '1';
}
});
return numbersArr.join('');
}
console.log(fakeBinary('3457'));Run Code Online (Sandbox Code Playgroud)
请注意,您可能还会使用其他原型,我只是想尽可能地与您的解决方案保持联系,您可能还想使用mapor甚至(不适当)reduce或常规的for循环。
forEach这样使用不会做任何事情- map而是使用。
let numbersArr = n.split("").map(num => {
if (Number(num) > 5) {
num = "0";
} else if (Number(num) <= 5) {
num = "1";
}
return num;
});
return numbersArr.join("");
Run Code Online (Sandbox Code Playgroud)
请注意,要产生所需的输出,您需要稍微更改条件:
if (Number(num) >= 5) {
num = "1";
} else {
num = "0";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |