如何更改满足特定条件的数组的两个连续值?

时间:2019-07-09 12:57:37

标签: javascript arrays

我正在尝试在输入的数组偶数之间添加破折号。由于必须比较两个连续的迭代,因此我的想法是使用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 + "-"
  }

4 个答案:

答案 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 functionindexoriginalArray)中添加参数来访问先前的值

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-')
)