将阵列带有多种条件需要清晰度

问题描述 投票:0回答:3

我与我的一个办公室挑战中的一个代码。

const arr = [5,10,15,'C','D', '+'];

    'C'C'从数组中删除上一个值 - 现在arr = [5,10,'d','+'];
  1. ''将上一个值的值两倍 - 现在 - 现在arr = [10,20,'+'];
  2. '+'总和值 - 现在arr = [30]
  3. 我正在尝试使用
array

方法来实现此目标。但是对我而言,根本不是该值。

正确的方法是什么?这是我的尝试:

reduce

livedemo
    

D

javascript ecmascript-6
3个回答
4
投票

使用映射是一个解决方案:

const arr = [5,10,15,'C','D', '+']; const result = arr.reduce((c,v,i,a) => { if(v=='C'){ a.splice(i-1, i-1); } if(v=='D'){ console.log(i) //console not works } return c + (Number(v) ? v:0); }, 0); console.log(result);

3
投票

const arr = [5, 10, 15, 'C', 'D', '+'];

const result = arr.reduce((acc, curr) => {
  if (curr === 'C') {
    acc.pop(); // remove the previous value from the array
  } else if (curr === 'D') {
    acc= acc.map(x=>x*2); // double the value of the ALL elements
  } else if (curr === '+') {
    const sum = acc.reduce((sum, val) => sum + val, 0); // sum all  
    return [sum]; // return the sum as a single element array
  } else {
    acc.push(curr); // add the current element to the accumulator
  }
  return acc;
}, []);

console.log(result);
时,您将阵列拼接出来,然后
const arr = [5, 10, 15, 'C', 'D', '+']; const functions = { 'C': arr => arr.slice(0, arr.length - 1), 'D': arr => arr.map(e => e * 2), '+': arr => [arr.reduce((acc, cur) => acc + cur)] } const result = arr.reduce((acc, cur) => { if (functions[cur]) { return functions[cur](acc); } else { return [...acc, cur]; } }, []); console.log(result);

v == "C"


1
投票
spl因此,当减少循环并再次运行时,

"C"

被跳过并
"D"

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.