2017-11-18 78 views
0

我需要這個用於動態使用。 我有2個相關聯的陣列:總結下一個數組元素的起始位置(javascript)

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關於發現在陣列未來元素,我覺得這是有用的一個循環,巡迴元素(那麼B然後c)用自己的價值觀和爲每個人執行一個代碼,如:總結下一個元素給他們。在sumed之後對元素值進行抽象化將不會起作用,因爲我希望腳本在某些範圍內發生變化...所以...我的問題是:如何將循環中的元素進行求和?我認爲這將是解決這個問題的關鍵,因爲我可以在這個例子中循環2次,並停止不啓動元素...

回答

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當前項目索引(這防止aa添加值),因此我將它添加到s,其中包含每個迭代some.reduce的結果如果不返回結果而沒有添加當前項目值,則返回它在一行中自動完成的語句。

你可以寫在減少這樣的功能更可讀

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

    return s; 
}, 0) 
+0

我將有一個廁所k瞭解你的代碼...foreach將運行每個項目,並且索引是爲了什麼? – Florin

+0

@弗洛林我編輯過。請檢查 –

+0

@弗洛林你也需要將它添加到'max'屬性中,我把它放在'html'中以顯示結果 –

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

1

假設other的密鑰與012上的相應值相同

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">

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>

+0

我會考慮你的解決方案,因爲我問了什麼你們所有人對我的解答並不是我計劃的解決方案,只是一種開始的方式Ty!我發現你的解決方案對我所要做的事更加動態 – Florin

相關問題