【问题标题】:How does switch- tatement work wtih strings?switch 语句如何处理字符串?
【发布时间】:2020-09-29 12:11:25
【问题描述】:

我描述了我尝试做的事情: 我必须得到一个嵌套数组,这取决于输入。每个子数组必须是一对两个字符。对从基本对创建:AT,CG。 例如:输入'CGT'输出[['C','G'],['G','C'],['T','A']] 我试过这个:

function pairElement(str) {
  let matched=str.match(/[A-Z]/g);    //get array from str
  let cookedArr=[];                   //the final array
  for(let i=0;i<matched.length;i++){  //create nested arr.
    for(let j=0;j<3;j++){
switch(matched[i]){
case 'A':
cookedArr[i][j].push('A');
cookedArr[i][j].push('T');
break;
case 'T':
cookedArr[i][j].push('T');
cookedArr[i][j].push('A');
break;
case 'C':
cookedArr[i][j].push('C');
cookedArr[i][j].push('G');
break;
case 'G':
cookedArr[i][j].push('G');
cookedArr[i][j].push('C');}
}}}
pairElement("GCG");

它出现:TypeError: Cannot read property '0' of undefined 我不明白有什么问题,如果 switch 语句使用 '===' 比较?

Где ошибка, если оператор switch использует '===' сравнение?

【问题讨论】:

  • 哪一行会抛出这个错误?您尝试过检查为什么它会被抛出?

标签: javascript arrays switch-statement


【解决方案1】:

cookedArr 一开始只是一个空数组,但在cases 中,您尝试推送到cookedArr[i][j] - 但cookedArr[i] 尚不存在子数组,因此分配给cookedArr[i][j]抛出。

通过首先定义嵌套数组来修复它,就在switch之前。

为了使代码更简洁,您可以使用对象将字符映射到它们的数组:

const baseToPairs = {
  C: ['C', 'G'],
  G: ['G', 'C'],
  T: ['T', 'A']
}

function pairElement(str) {
  return [...str].map(char => [...baseToPairs[char]]);
}
console.log(pairElement("GCG"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-18
    • 2013-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多