2017-05-04 47 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; 
} 

如何重新排列数组而不创建空位置?

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 ALSO排序数组所以不需要返回它: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