问题陈述是,我应将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'));
除0011
的输出以外,我是其他人,但实际输出为3457
。
答案 0 :(得分:5)
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'));
请注意,您也可以使用其他原型,我只是想尽可能地与您的解决方案保持紧密联系,您可能还想使用map
甚至(尽管不合适){{1} },甚至常规的for循环。
答案 1 :(得分:5)
tooltip: {
shared: true,
formatter: function() {
return this.y+'<br/> test';
}
不能执行任何操作-请使用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("");
答案 2 :(得分:1)
要使用forEach做到这一点,您将需要使用其他参数来引用数组和索引。
function fakeBinary(n) {
let numbersArr = n.split('');
numbersArr.forEach((num, index, arr) => {
if(Number(num) < 5) {
arr[index] = '0';
} else if(Number(num) >= 5) {
arr[index] = '1';
}
});
return numbersArr.join('');
}
console.log(fakeBinary('3457'));
但是forEach不是返回新数组的正确方法。您想使用map()
function fakeBinary(n) {
return n
.split('')
.map(num => (Number(num) < 5) ? '0' : '1')
.join('');
}
console.log(fakeBinary('3457'));
答案 3 :(得分:0)
const fakeBinary = (str) => Array.from(str, n => +(+n >= 5)).join('');
console.log(fakeBinary('3457'));