如何使用连续的大写和小写字母拆分字符串(以获取分子的原子数)?

时间:2019-01-18 20:23:46

标签: javascript algorithm

我正在尝试一种算法,该算法要求我读取数组中包含的原子数,而我只是开始测试了可能性,为此,我正在检查大写字母和小写字母分开,然后尝试将它们合并在一起,这就是我的尝试:

function countAtoms(molecule) {
    var element = molecule;
    var newArray = [];
    console.log('Hello World');
    for (let i = 0; i < element.length; i++) {
        if(element[i] == element[i].toUpperCase()){
            var uppercase = element[i]+'1';
            newArray = uppercase;
            console.log(newArray);

        }
        else{
            var lowercase = element[i];
            newArray = lowercase;
            console.log(newArray)
        }
            

    }

}

现在,我成功地按照自己想要的方式对它们进行了控制台。

enter image description here

现在算法要求我完全像这样打印出来: Cl1Na1,但我似乎无法加入这些数组,所有发生的事情是它们变成像N1a一行,C1l另一行,请帮助。

4 个答案:

答案 0 :(得分:2)

您需要将字符串分成以大写字母开头的组。一种简洁的方法是使用正则表达式:

let molecule = "NaCl"
let arr = molecule.match(/([A-Z][a-z]*)/g) // match uppercase letter followed by 0 or more lower case letters
console.log(arr)

您似乎想从那里映射它们并添加一个1。这将为您提供一个数组,然后您可以将其与join('')

重新加入

let m = "NaCl"

function countAtoms(molecule) {
    var element = molecule.match(/([A-Z][a-z]*)/g)
    return element.map(el => el+1).join('')
}
console.log(countAtoms(m))

答案 1 :(得分:1)

您可以使用下面的正则表达式将项目及其原子数拆分。甚至对于H2SO4H2O等分子也是如此。

const molecule = "H2SO4",
      arr = molecule.match(/[A-Z][a-z]*\d?/g),
      mappedArray = arr.map(a => /\d/g.test(a) ? a : a+1),
      joinedString = mappedArray.join('');
      
console.log(mappedArray)
console.log(joinedString)

答案 2 :(得分:0)

使用reduce,然后遍历所有和:)

function countAtoms(molecule) {
  console.log('Hello World');
  const sums = molecule.reduce((sum, atomKey) => {
    const atom = atomKey.toUpperCase()
    if (!sum[atom]) sum[atom] = 0;
    sum[atom] += 1;
    return sum;
  }, {})

  let finalString = '';

  Object.keys(sums).forEach(sumKey => {
    finalString += sumKey + sums[sumKey];
  })

  return finalString;


}

const result = countAtoms(['NA', 'CA', 'H', 'H', 'NA', 'na']);
console.log(result)

答案 3 :(得分:0)

要获得预期结果,请使用以下选项对现有代码进行以下更改

  1. newArray变量为空字符串var newArray = '';
  2. 每次都使用Concat而不是覆盖newArray变量newArray += uppercase;newArray += lowercase;

function countAtoms(molecule) {
    var element = molecule;
    var newArray = '';
    console.log('Hello World');
    for (let i = 0; i < element.length; i++) {
        if(element[i] == element[i].toUpperCase()){
            var uppercase = element[i]+'1';
            newArray += uppercase;
            console.log(newArray);

        }
        else{
            var lowercase = element[i];
            newArray += lowercase;
            console.log(newArray)
        }
            

    }

}

countAtoms('NaCl')