2014-11-16 3 views
4

2 개의 목록을 비교하고 항목, 오프셋, 방향을 이동하는 3 가지 변수를 얻고 싶습니다.2 목록에서 이동 ID + 오프셋 + 방향을 얻습니다.

예 1 :

올드 목록 = 121,12011943424140,39,38,37

새 목록 = 43,121,120119424140,39,38,37

I리스트의 전방까지의 항목 (43)를 이동

이동 항목 = 43

= 3 오프셋 (신구 위치 사이가 3 개 항목)

,691 363,210

방향 = +1 (이 이동 됨)


예 2

오래 NIDS는 = 121,12011943424140,39,38,37

새로운 NIDS = 121,120119434140,39,38,37,42

제가

=

이동 아이템리스트의 마지막 아이템 (42)을 아래로 이동 42

,174,515 15,

오프셋 = 5 그것을 처리하도록 스크립트를 사용하고


방향 = -1 (이 아래로 이동 됨) (신구 위치의 5 개 항목이 있음). 어떤 알고리즘을 사용할 수 있습니까? 또는 Google에서 검색 할 수있는 힌트는 무엇입니까? 고마워요!

+0

내가에 대한 검색을 시작 했죠 –

답변

1

여기에 예제로 테스트 한 내용이 있습니다. 적어도 한 가지 가능한 방향을 제공 할 수 있습니다. (좀 경계/특별한 경우를 남아있을 수 있습니다.)

var a1 = [121,120,119,43,42,41,40,39,38,37], 
    b1 = [43,121,120,119,42,41,40,39,38,37], 
    a2 = [121,120,119,43,42,41,40,39,38,37], 
    b2 = [121,120,119,43,41,40,39,38,37,42]; 

function f(a,b){ 
    var item, 
     i = offset = 0, 
     direction; 

    while (a[i] == b[i]){ 
    i++; 
    } 

    if (a[i + 1] == b[i]){ 
    direction = -1; 
    item = a[i]; 
    while (b[i] != item){ 
     offset++; 
     i++; 
    } 
    } else { 
    direction = 1; 
    item = b[i]; 
    while (a[i] != item){ 
     offset++; 
     i++; 
    } 
    } 
    return [item,offset,direction] 
} 

출력 : ". 자바 스크립트에서이 정렬되지 않은 목록을 비교"

console.log(f(a1,b1)) 
Array [ 43, 3, 1 ] 

console.log(f(a2,b2)) 
Array [ 42, 5, -1 ] 
+0

그것이 작동합니다! !!!! 정말 고마워 !! –

+0

BTW, 비교를 위해 서버 측에 이전 목록과 새 목록을 전달하고 싶습니다. 클라이언트가 브라우저를 사용하면 정렬 번호가 너무 자주 변경되어 브라우저 충돌이 발생하기 때문입니다. –

+0

http://codepen.io/thgreasi/pen/jlkhr 및 https://github.com/angular-ui/ui-sortable –