从起始位置(javascript)

时间:2017-11-18 05:33:24

标签: javascript jquery arrays

我需要动态使用它。 我有2个相关的数组:

Var $some = [1, 2, 3];
Var $other = [a, b, c];

a,b,c是一些html id,1,2,3是它们的值。 我在触发器上想要这样的东西:

$'#a').attr('max', //b+c val(2+3)
$'#b').attr('max', //a+c val(1+3)
$'#c').attr('max', //a+b val(1+2)

我在这里搜索了get prev and next items in array关于在数组中查找下一个元素的问题,我认为这将是一个循环,它将元素a(然后是b然后c)与其值相关联,并为每个元素执行如下代码:sum他们的下一个要素。 sumed之后的substracting元素值因为我希望某些范围内的脚本改变而无法正常工作... 所以......我的问题是:如何从循环中对要素进行求和?我认为这将是解决这个问题的关键,因为我可以在这个例子中循环2次并且在没有启动元素的情况下停止...

4 个答案:

答案 0 :(得分:1)

如果您的someother相同,那么您可以尝试此解决方案。

const some = [1, 2, 3];
const other = ['a', 'b', 'c'];

other.forEach((item, index) => {
   const sum = some.reduce((s, c, i) => index !== i ? s += c : s, 0);
   
   $(`#${item}`).text(sum);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="a"></p>
<p id="b"></p>
<p id="c"></p>

我正在迭代other数组中的每个项目。传递到forEach的函数有两个参数 - 当前项及other数组中的索引。然后我在some数组上调用reduce并将一个函数传递给它,它会获得三个参数 - accumulate value,当前项及some数组中的索引。在正文中,我检查some当前项目索引是否不等于other当前项目索引(这阻止了a添加a的值)所以我将它添加到s,其中包含some.reduce每次迭代的结果a返回它,如果不返回结果而不添加当前项值,则在一行语句中自动完成。

您可以像这样编写reduce函数以使其更具可读性

some.reduce((s, c, i) =>  {
   if(index !== i) {
      s += c; 
   }

   return s;
}, 0)

答案 1 :(得分:1)

假设other的密钥与some上的对应值相同

const some = [1, 2, 3];
const other = [a, b, c];

$.each(other, function(key, value){                        // Loop thru each id
    var sum = some.reduce((x, y) => x + y) - some[key]; // add each 'some' elements and subtracting the id's value
    $(value).attr('max', sum);                             // set max attr of id equal to sum
});

// log output on console
console.log(a);
console.log(b);
console.log(c);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<input type="number" id="a">
<input type="number" id="b">
<input type="number" id="c">

答案 2 :(得分:0)

使用html(function)进行循环索引,使用reduce()进行求和

&#13;
&#13;
var some = [1, 2, 3];
var other = ['a', 'b', 'c'];

$('#'+ other.join(',#')).html((elIdx)=>{
    return some.reduce((a,c,i) => a+= (i===elIdx ? 0 : c), 0);
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p id="a"></p>
<p id="b"></p>
<p id="c"></p>
&#13;
&#13;
&#13;

答案 3 :(得分:0)

以前的解决方案当然很好用,但是,以防万一,这里有更直接的解决方案:

$( "input" ).each(function( index ) {
sum=0;
for(i=0;i<$(this).siblings().length;i++) {
sum+= parseInt($( this ).siblings().eq(i).val());
}
console.log(sum);
$(this).attr('max',sum)
});

$( "input" ).each(function( index ) { // loop through each input
sum=0;
for(i=0;i<$(this).siblings().length;i++) { // get all siblings
sum+= parseInt($( this ).siblings().eq(i).val()); //calculate sum of siblings values
}
console.log(sum);
$(this).attr('max',sum)
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="inputs">
<input type="number" id="a" value=1>
<input type="number" id="b" value=2>
<input type="number" id="c" value=3>
</div>