我在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.
答案 0 :(得分:1)
算法就像这样
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])
的原因是:
要删除原始添加项目(下面第2行 - 来自您的代码),
要在该行的末尾减去它。
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的值,你可以做一些快捷方式 - 但在这一点上,我不明白这一点。