2017-05-04 1 views
0

중첩 된 객체의 문자열 값 중 하나를 기반으로 객체 배열의 순서를 변경하고 싶습니다. 배열은이 순서 여야합니다. 내 시도가 작동하지만 비 대한 가능성이 비효율적 인 솔루션처럼 보인다 :정확한 값을 기반으로 배열 재정렬

reorder(order) { 
    // create array with 4 null positions 
    var newOrder = [null, null, null, null]; 

    // order can have between 0 - 4 objects 
    for(var x = 0; x < order.length; x++){ 

     // based on value, assign predefined positions 
     switch (order[x].slug){ 
      case 'cheeseburger': 
       newOrder[0] = order[x]; 
       break; 
      case 'salad': 
       newOrder[1] = order[x]; 
       break; 
      case 'fries': 
       newOrder[2] = order[x]; 
       break; 
      case 'iceCream': 
       newOrder[3] = order[x]; 
       break; 
     } 
    } 
    console.log(newOrder); 
    return newOrder; 
} 

null 위치를 만들지 않고 배열을 재정렬하려면 어떻게해야합니까?

codepen example

+0

은'<>'조각 편집기를 클릭하십시오하고 [mcve을 만들 수 있습니다] - 대한 '주문'이란 무엇입니까? – mplungjan

답변

2

// assume you have the data arr 
 
var arr = [{ 
 
    slug: 'cheeseburger' 
 
}, { 
 
    slug: 'salad' 
 
}, { 
 
    slug: 'fries' 
 
}]; 
 

 
function reorder(arr){ 
 
// instead of switch, we put the order into an object 
 
var slugOrder = { 
 
    cheeseburger: 0, 
 
    salad: 1, 
 
    fries: 2 
 
}; 
 

 
// with the native sort function you can get expected results 
 
return arr.sort(function(itemA, itemB) { 
 
    return slugOrder[itemA] - slugOrder[itemB] 
 
}); 
 
} 
 
console.log(reorder(arr));

+1

'<>'를 클릭하고 실제 예제를 만드십시오 - 예를 들어 array.sort 또한 배열을 정렬합니다 현장에서 반환 할 필요가 없습니다. https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort?v=example – mplungjan

1

당신은 .sort()와 함께 사용하기위한 사용자 정의 비교 함수를 정의 할 수 있습니다.

여기에 설명 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

건물 사브리나의 대답에 :

var aMenu = [ 
{'name':'A','slug':'salad'}, 
{'name':'B','slug':'cheeseburger'}, 
{'name':'C','slug':'fries'}]; 
var oSlugOrder = {'cheeseburger':0,'salad':1,'fries':2}; 
aMenu.sort(function(oItemA, oItemB){ 
return oSlugOrder[oItemA.slug] - oSlugOrder[oItemB.slug]; }); 
+0

그건 의견입니다. 관련 코드를 추가하여 답을 만들고 담당자에게 50 개가 넘는 주석을달라고하십시오. – mplungjan