我正在尝试在输入的数组偶数之间添加破折号。由于必须比较两个连续的迭代,因此我的想法是使用reduce()并将其与某些条件组合。我是编程新手,所以如果解决方案既好又简单,那么我会很高兴...:)
我知道这种方法行不通,但是您能掌握要点。 对于前。我想从“ 12534487”中获取“ 12534-4-87”。
ar = prompt("numberInput").split("")
ar.map(x => parseInt(x));
ar.addDashToEven();
const addDashtoEven = (a, b) =>
for (a % 2 == 0 && b % 2 == 0) {
a = a + "-"
}
答案 0 :(得分:1)
您可以使用支票进行拆分和映射,并加入数组以获取字符串。
此方法通过使用实际索引和新的变量名称,为最后一项使用destructuring assignment。
{ [i - 1]: l }
var string = '124568',
result = string
.split('')
.map((r, i, { [i - 1]: l }) => (l % 2 === 0 && r % 2 === 0 ? '-' : '') + r)
.join('');
console.log(result);
答案 1 :(得分:1)
无需使用任何数组方法。
const myString = "12534487";
const myArr = myString.split('');
for(let i = 0; i < myArr.length; i++){
if(myArr[i] % 2 === 0 && myArr[i+1] % 2 === 0){
myArr[i] = myArr[i] + '-';
}
}
console.log(myArr.join(''))
答案 2 :(得分:0)
像这样使用reduce
:
const arr = [1, 2, 3, 4, 4, 4, 5, 6, 6, 9];
const res = arr.reduce((a, c) => {
if ((a[a.length - 1] % 2 == 0 || typeof a[a.length - 1] === "string") && c % 2 == 0) {
a[a.length - 1] += "-" + c;
return a;
} else {
a.push(c);
return a;
}
}, []);
console.log(res);
答案 3 :(得分:0)
您非常接近,可以通过向map function(index
和originalArray
)中添加参数来访问先前的值
console.log(
"12534487".split("")
.map((val, index, originalArray) => {
const prev = originalArray[index - 1];
return prev !== undefined && !(val % 2) && !(prev % 2) ? "-"+val : val;
})
.join("")
)
似乎更直观的另一种选择是使用正则表达式:
console.log(
"125343424324443487".replace(/([02468])(?=[02468])/g, '$1-')
)