将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
直接添加到函数内的返回值中。无论是哪种方式,我在回答中都将其添加到了我的代码中,并且大大简化了其中的一些内容。