我有一个已知值来比较
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;
}
有没有办法以编程方式更多地执行此操作?
答案 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()
部分
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;
编辑:根据需要为返回的索引值添加了+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 );