根据给定值更新操作从sum到减去或反之

时间:2016-07-07 16:06:16

标签: javascript jquery arrays

我需要加总或减去数组的值。

例如:

func dLog(message: Any, filename: String = #file, function: String = #function, line: Int = #line) { #if DEBUG print("[\(filename.lastPathComponent):\(line)] \(function) - \(message)") #else CLSLogv("[\(filename.lastPathComponent):\(line)] \(function) - \(message)", getVaList([""])) #endif } dLog(object) 应表示为:[1, 5, 10]

并且1 + 5 + 10 = 16应该是:[1, 5, -1, 10, 5] 1 + 5 - 10 - 5数字表示减法或总和取决于-1的位置。第一个-1将指示减法,第二个-1表示一切都回到常规总和,因为一切都在开头,第三个将再次减法,依此类推。

现在看看它应该是2 -1-1,它 应该表示为:[1, 5, -1, 10, 5, -1, 5, 5],得到了吗?

所以,所有内容都应该总结,直到数组包含1 + 5 - 10 - 5 + 5 + 5,因此它会更改为subraction,如果还有另一个-1,则操作应该更改为sum。依此类推,每当有一个新的'-1'时,操作就会发生变化。

我正在做这样的计算:

-1

And here is the whole code

有什么建议吗?

4 个答案:

答案 0 :(得分:3)

这是我的简短Array.prototype.reduce解决方案:

[1, 5, -1, 10, 5, -1, 5, 5].reduce(function(ctx, x) {
    if (x === -1)                 // if the current value is -1 ...
        ctx.sign *= -1;           // - change the sign
    else                          // otherwise ...
        ctx.sum += x * ctx.sign;  // - transform according to the sign
    return ctx;                   // return context
}, { sign: 1, sum: 0 }).sum;

答案 1 :(得分:3)

您可以使用变量来决定是添加还是减去实际值。

function sum(array){
    var negative;
    return array.reduce(function (a, b) {
        if (b === -1) {
            negative = !negative;
            return a;
        }
        return negative ? a - b : a + b;
    }, 0);
}

console.log(sum([1, 5, 10]));
console.log(sum([1, 5, -1, 10, 5]));
console.log(sum([1, 5, -1, 10, 5, -1, 5, 5]));

答案 2 :(得分:1)

您可以使用一个var并在每次元素中的元素true/false时更改-1



function sum(a) {
  var check = true, result = 0;
  a.forEach(function(e) {
    
    //If e is negative number and check is true change check to false
    if (e < 0 && check == true) {
      check = false;
    //If e is negative number and check is false change check to true
    } else if (e < 0 && check == false) {
      check = true;
    }
   
    //If e is positive number and check is true add to result
    if (e > 0 && check == true) {
      result += e;
    //If e is positive number and check is false subtract of result
    } else if (e > 0 && check == false) {
      result -= e;
    }
  })
  return result;
}

console.log(sum([1, 5, 10]));
console.log(sum([1, 5, -1, 10, 5]));
console.log(sum([1, 5, -1, 10, 5, -1, 5, 5]));
&#13;
&#13;
&#13;

答案 3 :(得分:1)

添加另一个混合,不是因为它更好,而是因为它可能:)(虽然这个版本确实依赖于ES6)

function calc(arr){
    var [v,...rest] = arr; //assign v to the first value, rest to the following values        
    var sr = rest.length ? calc(rest) : 0; //calc sum of rest
    return v === -1 ? -sr : v + sr; //if value === -1, return sum of rest with reversed sign, otherwise return sum
}

console.log(calc([1, 5, 10]));
console.log(calc([1, 5, -1, 10, 5]));
console.log(calc([1, 5, -1, 10, 5, -1, 5, 5]));