将 JavaScript 数组中的 n 个数字添加到数组中的先前数字

add n numbers in a javascript array to the previous numbers in array

本文关键字:数字 数组 添加 JavaScript      更新时间:2023-09-26

我有一个已知的值要比较

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){
        // ?
    })
}

那么我需要像这样检查从"一"开始的数组的值......

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;
}

有没有办法以编程方式做到这一点?

您可以使用

.map()将数组重新映射到一系列总和。 然后使用 .findIndex() 查找输入所在范围的索引。 要只获取带有总和的数组,请不要执行其中.findIndex()部分

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);  // Set this array value to sum of it and all previous values
  }).findIndex(function(v,i,a) {  // When function returns true findIndex will return current index
    if(i == 0) {
      return sT <= v;
    } else if(i == a.length-1) {
      return sT >= v*0.8;
    } 
    return a[i-1] <= sT && sT <= v
  }) + 1;
}
document.write(findRange(arr,sT))

编辑:根据需要向返回的索引值添加 +1。

这里不是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
    }
}

我使用了@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 );