我遇到了将一串数字转换为假二进制数字的挑战。在Codewars.com上,我将每个数字转换为0或1,如果数字小于5,它应该变为0,如果它的5或以上,它应该变为1。知道如何分析整个字符串的值:
function fakeBin(x){
if (x < 5)
return 0;
else return 1;
}
然而,这会分析整个字符串的值,我将如何分析字符串中的每个数字而不是整个字符串?
注意:我已经查看了网站上的解决方案,并且不了解它们,我不是在作弊。
答案 0 :(得分:4)
您可以使用两个简单的全局字符串替换操作在一行中执行此操作:
function fakeBin(x){
return ("" + x).replace(/[0-4]/g,'0').replace(/[5-9]/g,'1');
}
console.log(fakeBin(1259))
console.log(fakeBin(7815))
console.log(fakeBin("1234567890"))
("" + x)
部分只是为了确保您有一个字符串可供使用,因此该函数可以将数字或字符串作为输入(如上面的示例调用中所示)。
答案 1 :(得分:2)
简单的JavaScript解决方案,以实现预期的解决方案
function fakeBin(x){
x = x+'' ;
var z =[];
for(var i=0;i< x.length;i++){
if((x[i]*1)<5){
z[i] =0;
}else{
z[i]=1;
}
}
return z
}
console.log(fakeBin(357))
答案 2 :(得分:0)
拆分字符串并将当前函数应用于字符串的每个元素。您可以使用map
或reduce
:
function fakeBin(x) {
x = x.split('');
let toBin = x => {
if (x < 5)
return 0;
else return 1
}
return x.map(toBin).join('');
}
console.log(fakeBin("2351"));
&#13;
function fakeBin(x) {
x = [...x];
let toBin = x => x < 5 ? 0 : 1;
return x.map(toBin).join('');
}
console.log(fakeBin("2351"));
&#13;
function fakeBin(x) {
let toBin = x => x < 5 ? 0 : 1;
return [...x].reduce((acc,val) => acc + toBin(val), "");
}
console.log(fakeBin("23519"));
&#13;
答案 3 :(得分:0)
如果你在java中,你可以使用
charAt()
你用单词长度制作一个for,你可以逐个检查
for(int i = 0; i < text.length(); i++){
yourfunction(texto.charAt(i));
}
答案 4 :(得分:0)
下面的代码段将采用一个字符串,并根据您所描述的内容返回一个由零和/或一个字符串组成的新字符串。
我们使用for ...of
循环来遍历输入字符串,并根据解析的int是否大于或小于5来向返回数组添加0或1。
另请注意,如果字符不是数字,我们正在检查并抛出错误。
const word = "1639";
const stringToBinary = function(str) {
let ret = [];
for (const char of word) {
if (Number.isNaN(parseInt(char, 10))) {
throw new Error(`${char} is not a digit!`);
} else {
const intVal = parseInt(char, 10);
ret.push(intVal > 5 ? 1 : 0);
}
}
return ret.join('');
};
console.log(stringToBinary(word));
答案 5 :(得分:0)
您可以使用String.prototype.replace()
与RegExp
/([0-4])|([5-9])/g
匹配0-4
,5-9
,分别替换为0
,1
let str = "8539734222673566";
let res = str.replace(/([0-4])|([5-9])/g, (_, p1, p2) => p1 ? 0 : 1);
console.log(res);