我尝试将分割后的字符串与多个字符进行比较

时间:2019-03-05 18:04:14

标签: javascript

var input = 'HISFANTOR';
var output = [];
var char = input.split('');

for (var i = 0, len = char.length; i < len; i++) {
   if (char[i] == 'H' || 'K' || 'Y' || 'V' || 'B' || 'C' || 'N' || 'O' || 'F' || 'P' || 'S' || 'I' || 'U'){
      output.push(char[i]);
   }else{
      output.push('0');
   }
}
console.log(output);

我首先将其与案例结合使用,但是效果很好,所以我觉得我尝试了一下,但是还是得到了输入的输出

我期望的是什么

["H", "I", "S", "F", "0", "N", "0", "O", "0"]

9 个答案:

答案 0 :(得分:8)

图案

char[i] == 'H' || 'K' || 'Y'

返回第一个truthy值,该值是与'H'的比较,如果比较值为false,则取'K'。其他所有字符串均未使用。

要检查字符是否在数组或字符串中,可以使用includesArray#includes / String#includes)对数组或字符串检查给定值,然后返回truefalse

此提案使用Array.from,它接收一个字符串(基本上是任何可迭代对象,或者是一个具有length属性的对象),并返回一个字符数组。虽然此方法包含映射功能,但您可以检查字符并根据检查结果返回差异字符。

var input = 'HISFANTOR',
    output = Array.from(input, c => 'HKYVBCNOFPSIU'.includes(c) ? c : 0);

console.log(...output);

答案 1 :(得分:4)

如评论中所述,您应该为每个字母char[i] === 'H' || char[i] === 'K' ...等添加一个支票。

将字母放入数组中,然后使用spread operator将字符串转换为数组,然后使用[.map()][2]检查字母是否存在于字母数组中:

var input = "HISFANTOR";
var letters = ["H", "K", "Y", "V", "B", "C", "N", "O", "F", "P", "S", "I", "U"];

var result = [...input].map(l => letters.includes(l) ? l : "0")

console.log(result);

答案 2 :(得分:2)

char[i] == 'H' || 'K' || 'Y'不会针对每个字符检查char[i]

您需要更改

(char[i] == 'H') || (char[i] == 'K') || (char[i] ==  'Y')

或者您可以使用indexOf

var input = 'HISFANTOR';
var output = [];
var char = input.split('');

for (var i = 0, len = char.length; i < len; i++){
	if ("HKYVBCNOFPSIU".indexOf(char[i]) !== -1){
          output.push(char[i]);
	} else {
	  output.push('0');
	}
}
console.log(output);

答案 3 :(得分:2)

首先,我想说您有很多答案可以解释您的问题并改进您的代码,所以我对此不做深入介绍。相反,我将展示一种使用String.replace()String.split()来获得结果的不同方法。该方法包括用0替换字符集中的所有非字符,最后用split替换得到的字符串以获得字符数组。

var input = 'HISFANTOR';
var output = input.replace(/[^HKYVBCNOFPSIU]/g, "0").split("");

console.log(JSON.stringify(output));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

答案 4 :(得分:0)

您必须对所有字母使用char[i] ==alphabet。 ||不能像您以前那样使用

var input = 'HISFANTOR';
var output = [];
var char = input.split('');

for (var i = 0, len = char.length; i < len; i++){
    if (char[i] == 'H' ||char[i] == 'K' || char[i] =='Y' || char[i] =='V' || char[i] =='B' ||char[i] == 'C' || char[i] =='N' || char[i] =='O' || char[i] =='F' || char[i] =='P' ||char[i] == 'S' ||char[i] == 'I' ||char[i] == 'U'){
            output.push(char[i]);
    }else{
            output.push('0');
    }
}
console.log(output);

答案 5 :(得分:0)

使用map

var validChars = 'HKYVBCNOFPSIU'.split('');

var input = 'HISFANTOR';
var chars = input.split('');
var output = chars.map(c => validChars.includes(c) ? c : '0');

console.log(output);

答案 6 :(得分:0)

使用正则表达式和Array.prototype.map

var input = 'HISFANTOR';

out = [...input].map((char) => {
  return /H|K|Y|V|B|C|N|O|F|P|S|I|U/.test(char) ? char : 0;
});
console.log(out)

答案 7 :(得分:0)

您可以使用正则表达式,这是一种以一种短模式搜索所有字符的简便方法。

var input = 'HISFANTOR';
var output = [];
var char = input.split('');

for (var i = 0, len = char.length; i < len; i++){
    if (char[i].match(/[HKYVBCNOFPSIU]/g)){
            output.push(char[i]);
    }else{
            output.push('0');
    }
}
console.log(output);

答案 8 :(得分:0)

使用forEach和indexOf。

var input = 'HISFANTOR';
var output = [];
var char = input.split('');

char.forEach(el => {
  if('HKYVBCNOFPSIU'.indexOf(el) != -1){
    output.push(el)
  }else {
    output.push('0')
  }
})

console.log(output);