2014-04-07 5 views
0

아래 코드로 배열을 만듭니다.jQuery : 배열의 각 항목에 대한 변수를 만드는 방법

단일 함수는 지금까지 잘 작동하지만 루프의 유일한 문제점은 배열의 각 항목에서 변수 (nameX 및 dataX)를 동적으로 만드는 방법입니다.

예 : 내 배열은 [item1,item2,item3]입니다. 이 경우 변수는 name1, data1, name2, data2, name3, data3이어야합니다 (nameX 및 dataX는 현재 여기에있는 자리 표시 자 임).

내 코드 :

//get unique items 
var inputSearch = new Array(); 
$('td.searchTerm').each(function() { 
    if(($(this).text() != '') && ($(this).text() != ' ')) { 
     if(inputSearch.indexOf($(this).text()) == -1) { 
      inputSearch.push($(this).text()); 
     } 
    } 
}); 

//loop through array to get volumes per item 
var i; 
for (i = 0; i < inputSearch.length; i++) { 
    var nameX = inputSearch[i].replace(/\s+/g, ''); 
    var dataX = []; 
    var xSum = 0; 
    $('#myTable tbody tr').each(function() { 
     if ($(this).find('td:contains(' + nameX + ')').length === 0) { 
      dataX.push(0); 
     } else { 
      xSum = 0; 
      $(this).find('td:contains(' + nameX + ')').each(function() { 
       xSum += parseInt($(this).next('td').text()); 
      }); 

      dataX.push(xSum); 
     } 
    }); 
} 

업데이트 :

window['name' + i.toString()] = inputSearch[i].replace(/\s+/g, ''); 

많은 감사를위한 : 동적으로 이름 변수를 만드는 방법, 이제 데이터 만 변수가 누락을 발견 이 모든 도움, 팀.

+0

* "이 경우 변수는 name1, data1, name2, data2, name3, data3"이어야합니다. * 가장 원하지 않는 항목입니다. – Tomalak

+0

그들이 어떻게 호출되는지는 중요하지 않지만 서로를 겹쳐 쓰지 않도록 서로 다른 이름을 지정해야합니다. – user2571510

+0

당신은 여전히 ​​그것을 원하지 않습니다. 어떤 종류의 번호가 매겨진 변수를 사용하고 싶지는 않습니다. 그것이 바로 배열입니다. – Tomalak

답변

1

의견에서 언급했듯이 "가변 변수"를 만들려고 시도하지 마십시오. 고통과 고통 만이 그 길을 가로막고 있습니다.

이 보이지 않는 해킹에 의지하지 않고 인 것처럼 보이면 해결할 수 있습니다.

searchTerm = { 
    "foo": 10, 
    "bar": 20, 
    "baz": 0 
}; 

이 적절하게 혼합 된 경우 처리에 대한 생각 :

var searchTerm = {}; 

$('td.searchTerm').each(function() { 
    var term = $.trim($(this).text()), 
     name = term.replace(/\s+/g, '_'); 

    // prevent empty or non-unique entries 
    if (!term || searchTerm.hasOwnProperty(term)) return; 

    // sum up table values for the current term 
    searchTerm[term] = 0; 
    $('#myTable tbody td:contains(' + name + ')').each(function() { 
     searchTerm[term] += parseInt($(this).next('td').text(), 10); 
    }); 
}); 

당신이 뭔가를 줄 것인가. 현재 fooFoo은 다른 용어이며 필요한 것이거나 그렇지 않을 수도 있습니다.

extend jQuery with a case-insensitive :contains selector으로가는 쉬운 방법이 있습니다.

+0

감사합니다. 이 배열에서 번호 (10, 20, 0)에 액세스 할 수있는 방법이 있습니까? 항목 이름과 구분해야합니다. – user2571510

+0

별도의 배열을 채우는 것이 잘못되었습니다. 귀하의 질문에 대한 내 의견에 어떻게 표시 했습니까? – Tomalak

관련 문제