2016-10-09 6 views
-1

JavaScript로 두 개의 배열이 있고 첫 번째 순서에 따라 배열을 다시 배열하고 싶습니다.두 개의 다른 배열을 기반으로 새 배열 만들기 (일치 값)

첫 번째 배열 : I를 다시 배열 후

var arrayTwo = [ 
    { 
     "page_id" : "5", 
     "page_title" : "About" 
    }, 
    { 
     "page_id" : "2", 
     "page_title" : "Home" 
    }, 
    { 
     "page_id" : "4", 
     "page_title" : "Contact Us" 
    }, 
    { 
     "page_id" : "1", 
     "page_title" : "Gallery" 
    }, 
]; 

:

var arrayOne = [ 
     "5", 
     "1", 
     "2", 
     "4" 
    ] 

2 어레이 I 원할 arrayOne에 맞는 페이지 ID에 기초하여 재 배열 page_id를 기반으로 arrayTwo를 다시 정렬하려고하므로 두 번째 배열은 다음과 같이 보입니다.

var arrayTwo = [ 
    { 
     "page_id" : "5", 
     "page_title" : "About" 
    }, 
    { 
     "page_id" : "1", 
     "page_title" : "Gallery" 
    }, 
    { 
     "page_id" : "2", 
     "page_title" : "Home" 
    }, 
    { 
     "page_id" : "4", 
     "page_title" : "Contact Us" 
    }, 

]; 

나는이 시점에서 꽤 고생했다. 나는 여기에 많은 '솔류션'솔루션을 발견했지만, 작동하지 않는 것으로 보인다. 나는 for-loop를 사용하여 이것을 시도했지만 아무데도 가지 않았다. 나는 일반적으로 도움을 청하지 않겠지 만 나는 3 시간 동안 좋은 검색을 해왔다.

첫 번째 일치는 두 번째로 page_id과 일치하므로 사용할 수있는 일치 항목이 있지만 앞에서 언급 한 것처럼 꽤 고생했습니다.

도움을 주시면 감사하겠습니다. 이제

var map = arrayTwo.reduce((a, b) => { 
    a[b.page_id] = b; 
    return a; 
}, {}); 

우리가 쉽게 map 첫 번째 배열, 같은 수 있습니다 :

arrayOne.map(x => map[x]); 

예를 들어 작업 -

답변

0

먼저 객체에 두 번째 배열을 변환 키는 페이지 ID, 예를 들어있을 것입니다 : http://jsbin.com/tiyudutasi/edit?js,console

+0

이 솔루션은 완벽합니다. 감사! –

+1

그냥 간단한 메모입니다. 어떻게 투표 할 수 있습니까? 나는 다른 사람들과 반대로 CD ..의 솔루션을 선택했기 때문에 그것이라고 생각합니다. CD의 솔루션은 가장 단순합니다. 이 커뮤니티는 쓰라린 엘리트 주의자입니다. 더 이상 질문 할 수 없습니다. –

0

arrayOne, Array.prototype.filter()을 반복 할 때 Array.prototype.map()을 사용할 수 있습니다. 다음을

var index = {}; 
arrayTwo.forEach(function(obj){index[obj.page_id] = obj;}); 

: 현재 arrayOne 값과 같은 page_id을 가진 arrayTwo에서 일치하는 객체는

var arrayOne = [ 
 
    "5", 
 
    "1", 
 
    "2", 
 
    "4" 
 
]; 
 

 
var arrayTwo = [{ 
 
    "page_id": "5", 
 
    "page_title": "About" 
 
}, { 
 
    "page_id": "2", 
 
    "page_title": "Home" 
 
}, { 
 
    "page_id": "4", 
 
    "page_title": "Contact Us" 
 
}, { 
 
    "page_id": "1", 
 
    "page_title": "Gallery" 
 
}]; 
 

 
arrayTwo = arrayOne.map(function(id) { 
 
    return arrayTwo.filter(function(obj) { 
 
    return obj.page_id === id 
 
    })[0] 
 
}); 
 

 
console.log(arrayTwo);

0

당신은 먼저 "인덱스"를 만들고 그 개체 수는 수를 반환 할 수 있습니다 제공 색인을 사용하여 객체의 순서를 바꿀 수 있습니다.

var reordered = arrayOne.map(function(id){return arrayTwo[id];}); 
0

또한 2 대해 forEach (배열 당 하나)

var arrayOne = [ 
    "5", 
    "1", 
    "2", 
    "4" 
] 
var arrayTwo = [ 
    { 
     "page_id" : "5", 
     "page_title" : "About" 
    }, 
    { 
     "page_id" : "2", 
     "page_title" : "Home" 
    }, 
    { 
     "page_id" : "4", 
     "page_title" : "Contact Us" 
    }, 
    { 
     "page_id" : "1", 
     "page_title" : "Gallery" 
    }, 
]; 

var result = []; 
arrayOne.forEach(item => arrayTwo.forEach(element => { if (item === element.page_id) result.push(element)})); 

console.log(result); 
0

좀 더 읽을 수 find를 사용하여 생각을 할 수 있습니다.

arrayOne.map(id => arrayTwo.find(row => row.page_id === id)); 

더 많은 브라우저를 지원해야하는 경우 sort을 대신 사용할 수 있습니다.

arrayTwo.sort((a, b) => arrayOne.indexOf(a.page_id) - arrayOne.indexOf(b.page_id)); 
관련 문제