我正在尝试一种算法,该算法要求我读取数组中包含的原子数,而我只是开始测试了可能性,为此,我正在检查大写字母和小写字母分开,然后尝试将它们合并在一起,这就是我的尝试:
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)
}
}
}
现在,我成功地按照自己想要的方式对它们进行了控制台。
现在算法要求我完全像这样打印出来:
Cl1Na1
,但我似乎无法加入这些数组,所有发生的事情是它们变成像N1a
一行,C1l
另一行,请帮助。>
答案 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)
您可以使用下面的正则表达式将项目及其原子数拆分。甚至对于H2SO4
,H2O
等分子也是如此。
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)
要获得预期结果,请使用以下选项对现有代码进行以下更改
var 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')