2013-12-12 3 views
2

나는 언제든지 100 개 노드로 제한된 HTML 페이지에 연속적인 숫자의 숫자를 더하는 간단한 계산기를 작성하고 있습니다. 여기에 내가 무엇을 탐구했습니다 것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+ rep 사용자인데 코드/노력을 표시하지 않고 어떻게 질문 할 수 있습니까? – 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 [- 카운터]) {} – rrrfusco

+0

while (b [startingIndex] == a [counter])를 쓰는 것과 같습니다. {startingIndex = startingIndex-1; 카운터 = 카운터 -1;}'. 값이 일치하는 한 인덱스와 카운터를 줄입니다. – tewathia

1

그것은 만약에 중복 요소를 제거하려는 같다 두 번째 배열의 시작

아마 배열 요소 대신 하위 문자열을 비교할 수 있습니다.

는 문자열 "3,2,1"를 생성하는 루프를 만들 수 있다면 이러한 문자열은

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

, 방금 입력을 대체 할 수있는이 캐릭터를 얻기 위해 처음 3 개 숫자를 제거 고려 "8,7"

문자열을 연결하고 배열을 얻기 위해 필요한 것을하십시오.