Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将javascript数组中的n个数字添加到数组中以前的数字_Javascript_Arrays_Loops - Fatal编程技术网

将javascript数组中的n个数字添加到数组中以前的数字

将javascript数组中的n个数字添加到数组中以前的数字,javascript,arrays,loops,Javascript,Arrays,Loops,我有一个已知的比较值 var sT = 100; 具有随机值数组和未知长度 var someArray = [12, 21, 3, 54, 5, ... ] 然后,我想将每个数字添加到所有以前的值中 var one = someArray[0]; var two = someArray[0]+someArray[1]; var three = someArray[0]+someArray[1]+someArray[2]; // ... 或者我可以做这样的事 var otherArray

我有一个已知的比较值

var sT = 100;
具有随机值数组和未知长度

var someArray = [12, 21, 3, 54, 5, ... ] 
然后,我想将每个数字添加到所有以前的值中

var one = someArray[0];
var two = someArray[0]+someArray[1];
var three = someArray[0]+someArray[1]+someArray[2];
// ...
或者我可以做这样的事

var otherArray = [];

someArray.forEach(function(i){
    otherArray.push(i+=i);
    somefunction();
});

function somefunction() {
    otherArray.forEach(function(i){
        // ?
    })
}
然后我需要检查从'1'开始的数组的值,就像这样

var int;

if ( sT <= one ){
    int = 1;
}
else if ( sT >= one && sT <= two ) {
    int = 2;
}
else if ( sT >= two && sT <= three ) {
    int = 3;
}

else if ... 

// until the last

else if ( sT >= twenty*0.8 ) {
    int = 20;
}
var-int;
如果(sT=1&&sT=2&&sT=20*0.8){
int=20;
}

有没有一种方法可以更具编程性地实现这一点?

这里不是JavaScript代码,没有测试,应该加以说明

var sum = someArray[0]
var intValue
var total = someArray.count //TotalNumber
for int index = 0; index < total; index ++ {
  if (index + 1) >= total {
    return
   }
  if sT < sum {
      intValue = 1
    }else if sT >= total*0.8 {
      intValue = total
    } else if(sT >= sum && sT <= sum + someArray[index+1]) {
       intValue = index+2
    }
}
var sum=someArray[0]
var intValue
var total=someArray.count//TotalNumber
对于int指数=0;指数=总计{
返回
}
如果sT=总计*0.8{
intValue=总计

}否则,如果(sT>=sum&&sT您可以使用
.map()
将数组重新映射为一系列的和。然后使用
.findIndex()
查找输入所处范围的索引。要仅获取包含和的数组,只需不执行此部分的
.findIndex()

var sT=56;
var arr=[1,54,34,2,64,75,87]
函数系列(r,n){
返回r+n;
}
功能findRange(arr、sT){
返回arr.map(函数(v,i,a){
返回a.slice(0,i+1).reduce(sumSeries);//将此数组值设置为它与所有以前的值之和
}).findIndex(函数(v,i,a){//当函数返回true时,findIndex将返回当前索引
如果(i==0){
返回sT=v*0.8;
} 

返回一个[i-1]我使用了@Goblinlord的一个稍微修改过的版本

此外,还为零基数的返回帐户添加了+1

var sT = 56;

var sT = 56;
var arr = [1, 54, 34, 2, 64, 75, 87];

function sumSeries(r, n) {
  return r+n;
}

function findRange(arr,sT) {
  return arr.map(function(v,i,a) {
    return a.slice(0,i+1).reduce(sumSeries);
  }).findIndex(function(v,i,a) {
    if(i === 0) {
      if(sT <= v)
        return true;
      return false;
    }
    if(i == a.length-1) {
      if(sT >= v*0.8)
        return true;
      return false;
    }
    if(a[i-1] <= sT && sT <= v)
      return true;
    return false;
  });
}

console.log( findRange(arr,sT)+1 );
var sT=56;
var sT=56;
var-arr=[1,54,34,2,64,75,87];
函数系列(r,n){
返回r+n;
}
功能findRange(arr、sT){
返回arr.map(函数(v,i,a){
返回a.slice(0,i+1).reduce(sumSeries);
}).findIndex(函数(v,i,a){
如果(i==0){
如果(sT=v*0.8)
返回true;
返回false;
}

如果(a[i-1]是的,已经在使用它了……正好不在这个函数中为什么要为求和值创建单独的变量,而不是将它们放入新数组中?那么可以在循环中求和,并在循环中进行比较(可能都在同一个循环中)而不是一连串的if/else if。@nnnnnn编辑了我的问题,以包含您不创建变量的想法。@Ageonix是的,当然can@ShawnAppleheadNaquin看起来您不仅要创建一个包含和的数组,还要找到输入值所在范围的索引(您正在设置的var int)。这是否正确?您可以将
+1
直接添加到函数内的返回值中。无论是哪种方式,我在回答中都将其添加到了我的代码中,并且大大简化了其中的一些内容。