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

时间:2016-02-17 00:40:41

标签: 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 = [];

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

function somefunction() {
    otherArray.forEach(function(i){
        // ?
    })
}

然后我需要检查从'one'开始的数组的值,如此...

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

有没有办法以编程方式更多地执行此操作?

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

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

&#13;
&#13;
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))
&#13;
&#13;
&#13;

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

答案 2 :(得分:0)

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