如何检查字符串中的每个数字?

时间:2017-03-04 05:24:58

标签: javascript jquery html css

我遇到了将一串数字转换为假二进制数字的挑战。在Codewars.com上,我将每个数字转换为0或1,如果数字小于5,它应该变为0,如果它的5或以上,它应该变为1。知道如何分析整个字符串的值:

function fakeBin(x){
if (x < 5)
return 0;
else return 1;
}

然而,这会分析整个字符串的值,我将如何分析字符串中的每个数字而不是整个字符串?

注意:我已经查看了网站上的解决方案,并且不了解它们,我不是在作弊。

6 个答案:

答案 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)

拆分字符串并将当前函数应用于字符串的每个元素。您可以使用mapreduce

完成此操作

&#13;
&#13;
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;
&#13;
&#13;

重构

&#13;
&#13;
function fakeBin(x) {
  x = [...x];

  let toBin = x => x < 5 ? 0 : 1;

  return x.map(toBin).join('');
}

console.log(fakeBin("2351"));
&#13;
&#13;
&#13;

减少

&#13;
&#13;
function fakeBin(x) {

  let toBin = x => x < 5 ? 0 : 1;

  return [...x].reduce((acc,val) => acc + toBin(val), "");

}

console.log(fakeBin("23519"));
&#13;
&#13;
&#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-45-9,分别替换为01

let str = "8539734222673566";

let res = str.replace(/([0-4])|([5-9])/g, (_, p1, p2) =>  p1 ? 0 : 1);
 
console.log(res);