Javascript 中的函数,在每两个奇数或偶数之间插入破折号或星号



我想写一个函数,在每两个奇数之间插入破折号(' - '(,并在每两个偶数之间插入星号(' * '(。例如:

Input: 99946
Output: 9-9-94*6
Input: 24877
Output: 2*4*87-7

我的尝试


function dashAst (para) {
let stringArray = para.toString().split('');
let numbArray = stringArray.map(Number);


for (let i = 0; i<numbArray.length; i++) {
if (numbArray[i] %2 === 0 && numbArray[i+1] % 2 === 0) {
numbArray.splice(numbArray.indexOf(numbArray[i]), 0, '*')
} 

else if (numbArray[i] %2 !== 0 && numbArray[i+1] %2 !== 0) {
numbArray.splice(numbArray.indexOf(numbArray[i]), 0, '-')
}
}

return numbArray
}

当我尝试调用该函数时,它不返回任何内容。例如,我单独测试了拼接命令,它似乎是正确的,这使我更加困惑。感谢大家的阅读,甚至帮助初学者。

循环遍历在循环期间更改其长度的数组可能会非常混乱(i每次splice时都需要进行调整(。创建新的结果变量更容易:

function dashAst(para) {
const stringArray = para.toString().split('');
const numbArray = stringArray.map(Number);
let result = "";
for (let i = 0; i < numbArray.length; i++) {
const n = numbArray[i], next = numbArray[i + 1];
result += n;
if (n % 2 == next % 2) {
result += n % 2 ? '-' : '*';
}
}
return result;
}
console.log(dashAst(99946)); // "9-9-94*6"
console.log(dashAst(24877)); // "2*4*87-7"

您可以通过检查项目和下一项是否具有相同的模数来映射值,并采用由模定义的分隔符。

function dashAst(value) {
return [...value.toString()]
.map((v, i, a) => v % 2 === a[i + 1] % 2 ? v + '*-'[v % 2] : v)
.join('');
}
console.log(dashAst(99946)); // 9-9-94*6
console.log(dashAst(24877)); // 2*4*87-7

我希望这有帮助

var str = '24877';
function dashAst (para) {
let stringArray = para.toString().split('');
let numbArray = stringArray.map(x => parseInt(x));
console.log(numbArray);
var out=[];

for(let i = 0; i < numbArray.length; i++) {
if(numbArray[i] % 2 == 0){
out.push(numbArray[i]);
numbArray[i + 1] % 2 == 0 ? out.push('*') : 0;
}else if(numbArray[i] % 2 != 0) {
out.push(numbArray[i]);
numbArray[i + 1] != undefined ? out.push('-') : 0;
}
}
console.log(out.join(''));
return out;
}
dashAst(str);

最新更新