需要一个数组,其中new array的第一个元素=除第一个元素-Javascript之外的所有元素的总和

时间:2014-01-04 08:58:11

标签: javascript arrays sum except

我在Java脚本中有一个数组arr [0,1,2,3,... 10]。我需要创建一个新数组,其中包含new array的第一个元素=除了前一个元素之外的所有元素的总和数组,继续。

说明:我有

  Array=new Arr[0,1,2,3,..10].

我需要一个

  Array=new new Array[first element,second element..]

其中

 first element=(1+2+..10)-0 ,
    second element=(0+2+3+..10)-1,
    third element=(0+1+3+..10)-2,

.. goes on till last element.

5 个答案:

答案 0 :(得分:1)

算法就像这样

  1. 只计算数组中所有元素的总和
  2. 遍历数组并从总和中减少元素值并推入新数组
  3. 代码

    var sum = 0;
    var result = [];
    for (var i = 0; i < arr.length; i++) {
      sum += arr[i];
    }
    
    for (var i = 0; i < arr.length; i++) {
      result.push(sum - arr[i]);
    }
    
    console.log(result);
    

    注意,这可以通过使用Array.reduce和Array.every,Array.slice的组合的短代码片段来完成。但是这些所有方法都存在浏览器兼容性问题,因为旧的IE浏览器不支持它们。

答案 1 :(得分:1)

var myArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var sum = myArray.reduce(function(previous, current) {
    return previous + current;
}, 0);
var newArray = myArray.map(function(currentElement) {
    return sum - currentElement;
});
console.log(newArray);

<强>输出

[ 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45 ]

答案 2 :(得分:1)

看起来你必须做这样的事情:

var nums = new Array(0,1,2,3,4,5,6,7,8,9,10);
var sum = Function('return ' + nums.join('+') + ';')();
var final = [];

for(j = 0; j < nums.length; j++){
   final.push(sum - (2 * nums[j]) );
}

console.log(final);

您必须在最后一步中执行(2 * nums[i])的原因是:

  1. 要删除原始添加项目(下面第2行 - 来自您的代码),

  2. 要在该行的末尾减去它。

  3.   

    var third element =(0 + 1 + 3 + .. 10)-2,

    fiddle - 对于函数的@wared的信用 -

答案 3 :(得分:0)

你可以这样做:

arr = [0,1,2,3,4,5,6,7,8,9,10]

//Sum them all
sum = 0
for(i=0; i<arr.length; i++){
   sum+=arr[i];
}

//Calculate the result
result = []
for(i=0; i<arr.length; i++){
   result.push(sum-arr[i]);
}

alert(result);

检查这个小提琴:http://jsfiddle.net/eg7F6/

答案 4 :(得分:0)

这是一般方法:

var array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var sum = array.reduce(function (sum, value) { return sum+= value });
var newArray = array.map(function(value) { return sum - value });

但是,如果数组总是从0到10的值,你可以做一些快捷方式 - 但在这一点上,我不明白这一点。