2013-12-12 63 views
2

我正在寫一個簡單的計算器,它可以隨時在HTML頁面上累積連續的數字流,限制爲100個節點。在html中總結選定的值

我可以選擇與當前頁面上的節點:

var els = document.querySelectorAll('span.class'); 
var len = els.length; 
arr = []; 
for (var i=0; i < len; i++) { 
     var no = els[i].innerHTML; 
     arr.push(no); 
} 
console.log(no); 


這裏就是我一直在探索,也許你可以提出一個簡單的或改進的方法是什麼?

1. Select values, push into an array. 
2. Store array in a cookie, or htmllocalstorage 
3. every 5 seconds, push new values into 2nd array. 
4. Read 1st array and compare to 2nd array. 
5. create new array. sum values. store new array. 

我一直有與循環比較值的麻煩。 2個數組有重疊值的拼接函數嗎?

在下面的例子中,所需的陣列將是: [1,2,3,2,1,8,7]

var arr1 = ['1','2','3','2','1']; 
var arr2 = ['3','2','1','8','7']; // the first two values are now truncated off because current line is 102 
var arr3 = []; 

for(i=0; i<arr1.length; i++) 
{ 
    for (j=0; j<arr2.length; j++) 
    { 
    // number exists in both arrays 
    // next number is next index 
    if (arr1[i] == arr2[j] && arr1[i+1] == arr2[j+1] && arr1[i+2] == arr2[j+2]) 
    { 
     arr3.push(arr1[i]); 
     //console.log(arr1[i]+ ' '+arr2[j] + 'true ' + arr1[i+1] + ' ' + arr2[j+1]+ arr1[i+2] + ' ' + arr2[j+2]); 
    } 
    else 
    { 
     //arr3 = []; 
     //console.log(arr1[i]+ ' '+arr2[j] + ' false'); 
    } 
    } 
} 
var end = arr3[0]-1; 
var arr4 = arr1.slice(0,end); 
var arr5 = arr4.concat(arr2); 
//console.log(arr5); 

var total=0; 
for (k=0;k<arr5.length; k++) 
{ 
total += parseInt(arr5[k]); 
} 
console.log(total); 
+0

有沒有辦法接受的值一次一個? – Matt

+0

Comeon,作爲100+代表用戶,你如何在不顯示代碼/努力的情況下提出問題? – Praveen

+2

除非您向我們展示您的一些代碼,否則我們無法理解您的問題。 –

回答

1

您可以通過比較從第一個數組的末尾開始的值與第二個數組中的相應值來完成此操作。如果公共塊(在您的示例中爲['3','2','1'])完全匹配,也就是說第二個數組中的前n個(= chunk.length)值和第一個數組中的最後n個值相同,則可以將兩個數組連接到得到重疊的結果。

function overlap(a, b) { 
    var counter = a.length - 1; 
    var startingIndex = b.indexOf(a[counter]); 
    while (b[--startingIndex] == a[--counter]) {} 
    if (startingIndex == -1) { 
     return a.slice(0, counter + 1).concat(b); 
    } else { 
     return a.concat(b); 
    } 
} 

DEMO

+0

你能解釋這部分嗎? while(b [ - startingIndex] == a [ - counter]){} – rrrfusco

+0

這與編寫'while(b [startingIndex] == a [counter]){startingIndex = startingIndex-1; counter = counter-1;}'。只要值匹配,它就不斷減少索引和計數器。 – tewathia

1

看起來你正在試圖在以除去重疊元素第二個數組的開始。

也許你可以比較子字符串而不是數組元素。

考慮這些字符串

var input1 = "1,2,3,2,1"; 
var input2 = "3,2,1,8,7"; 

如果你可以創建一個循環來生成字符串「3,2,1」,只需更換輸入,擺脫了前3個數字中得到這個字符串「8,7」

連接字符串,並做你需要得到你的數組。