2012-03-11 2 views
1

사용자가 작성한 요소의 수를 순환하는 for 루프가 있습니다. 이 플러그인에는 많은 설정이 있으며 각 요소는 특정 설정을 수신 할 수 있습니다.Javascript에서 많은 값을 분할하고 할당하는 더 나은 방법은 무엇입니까?

  1. 사용자 설정은 다음과 같은 형식으로 입력됩니다 를 [Speed_X는 "1000,500> 1000,200> 0,0" 이것은 3 개 별도의 요소에 대한 인/아웃의를 [Speed_X을 제어합니다. >은 개체별로 구분되며 쉼표는 입력/출력을 구분합니다.

1 1000,500
2 1000,200
: 결과

  • 그래서 특정 개체를 [Speed_X 값을 잡을 수있는, 내가 speed_x_set로를 [Speed_X을 분할 한 (>에 의해 분할) (이 객체 # 이후) 및 쉼표 (,)로 분할 해 3 0,0`

  • 3 루프 내부에서, 나는 인덱스 값을 잡아 (speed_x_in 및 speed_x_out을 얻을 수 있습니다.)

    for(var i=0; i<OS.numberofobjects; ++i){ 
        OS.speed_x_on_set[i]=speed_x_set[i].split(",")[0], 
        OS.speed_x_off_set[i]=speed_x_set[i].split(",")[1], 
        ... 
    }; 
    

    모든 것은 개체에 의해 할당되고 마스터 OS 설정 개체에 올바르게 설정/해제됩니다. T * 그는이 패션으로 분할해야하는 많은 설정이 있습니다. * 예 : delay_x_set, speed_y_set, opacity_set 등. 이름은 모두 기본 설정 이름을 기반으로하며 "_set "위와 같이 추가되었습니다. 바라기를 이것은 충분한 정보를 제공합니다. 감사!

    +3

    값을 두 번 나누지 않으려면 먼저 변수에 speed_x_set [objindex] .split (",")를 지정하십시오. –

    +1

    루프 변수에'i'를 사용하면 시각적 잡음에도 도움이됩니다. – sdolan

    +0

    루프에서 반복 변수로 i를 사용하기위한 Upvote.그것은 정말로 읽는 데 도움이됩니다. –

    답변

    1

    난 당신이 parallel assignment라고 찾고있는 무엇 분할 결과를

    for(var objindex=0; objindex<OS.numberofobjects; ++objindex){ 
        var splits = speed_x_set[objindex].split(","); //Cache the split so its does not need to be done twice 
        OS.speed_x_on_set[objindex] = splits[0]; 
        OS.speed_x_off_set[objindex] = splits[1]; 
        ... 
    }; 
    
    +0

    왜 결과를 캐시하고 싶습니까? 나는 따라 할 지 모르겠지만 루프가 1) object1을 치면 2) 입력 된 모든 속도 값을 포함하는 speed_x_set으로 이동하십시오. 3) "1000,1000"처럼 보이는 올바른 속도 값을 찾습니다. , out ") 4) 값을 분할하고 첫 번째 값을 OS.speed_x_on_set에 할당하고 두 번째 값을 OS.speed_x_off_set .....에 할당합니다. 어떻게 결과를 캐싱하여 올바르게 처리 할 수 ​​있습니까? 감사! – Aaron

    +2

    @Aaron : 코드에서 'speed_x_set [objindex] .split (",")'을 두 번하고 있습니다. 나는. 그것은'speed_x_set [objindex]'를 검색하고 @Starx '코드에서 한 번만 쓰는 대신 문자열을 두 번 분할해야합니다. 그것은 (당신이 전반적인 문제에 대해 더 이상의 정보를 가지지 않고) 할 수있는 유일한 개선입니다. –

    0

    을 캐시 말할 것입니다,하지만 불행히도, 자바 스크립트는 없습니다.

    루비 그러나, 유사한 패턴을 참조하는 것이 일반적입니다 : 다른 사람이 언급 한 것처럼

    first, second = "first second".split 
    

    , 확실한 방법은 분할 결과를 캐시와 별도로 지정하는 것입니다. 질문에 직접 답변하지 않아서 죄송합니다.

    2

    동일한 항목에 두 번 액세스하지 않고 반복 할 때마다 동일한 split을 두 번 수행합니다. 자바 스크립트 1.7 (파이어 폭스)에서 당신이 단순히 가질 수

    for (var i = 0, item; item = speed_x_set[i++];) { 
        var values = item.split(","); 
        OS.speed_x_on_set.push(values[0]); 
        OS.speed_x_off_set.push(values[1]); 
    } 
    

    공지 사항 :뿐만 아니라 인 ECMAScript의 다음 버전에서

    for (var i = 0, item; item = speed_x_set[i++];) { 
        var [on, off] = item.split(","); 
        OS.speed_x_on_set.push(on); 
        OS.speed_x_off_set.push(off); 
    } 
    

    그리고 희망 그래서, 당신은 같은 것을 가질 수 있습니다. "소멸 할당"이라고합니다.

    +0

    Awww, 정말 멋지고 감사합니다. 감사합니다! 그러나 문제는 약 60 개의 설정이있어서 실제 루프 코드가 꽤 길다는 것입니다. 그들은 모두 똑같은 일을하고 있습니다. 예 : 사용자가 speed_x : "1000,500> 1000,500> 200,500"과 같이 3 개의 객체에 대해 speed_x를 설정할 수 있습니다. 첫 번째 2 개 개체는 speed_x_in이 1000이고 speed_x_out이 500입니다. 세 번째 개체는 speed_x_in이 200이고 500 개가 있습니다. 먼저 개체 (>)에서 speed_x_set으로 분할됩니다 (따라서 speed_x_set = index 1 : 1000,500가됩니다). , 인덱스 2 : 1000,500 ... 등 거기에서 쉼표로 구분하고 OS.speed_x_set 넣으십시오. – Aaron

    +0

    게시 된 코드를 잘 코드 그냥 톤 보인다. 그래서, 또한 예 delay_x (똑같은 방법으로 쓰여졌습니다.) 이걸 어떻게 수행 할 지 모르겠습니다 ... 감사합니다! – Aaron

    +0

    실제 코드를 볼 수 있을지 잘 모르겠지만, 코드는 오직 하나의 분할을 수행합니다 :'values ​​= speed_x.split (/, |>);'그러면 모든 값을 가진 배열을 가지며 쌍으로되어 있고 반복 할 수 있습니다. MyValues.speed_x = "..."; MyValues.speed_y = "..."; '다음과 같이하면된다 : for (var prop in MyValues) doSomething (MyValues ​​[prop])'; 그런 것. – ZER0

    관련 문제