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"]
答案 0 :(得分:8)
图案
char[i] == 'H' || 'K' || 'Y'
返回第一个truthy值,该值是与'H'
的比较,如果比较值为false
,则取'K'
。其他所有字符串均未使用。
要检查字符是否在数组或字符串中,可以使用includes
(Array#includes
/ String#includes
)对数组或字符串检查给定值,然后返回true
或false
。
此提案使用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);