我需要动态使用它。 我有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次并且在没有启动元素的情况下停止...
答案 0 :(得分:1)
如果您的some
和other
相同,那么您可以尝试此解决方案。
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()
进行求和
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;
答案 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>