2017-04-05 81 views
0

JavaScript对象,这里是我的数据集重新排序基于特定键值

var myData = [ 
    { 
    key: 'female', 
    value: 1000 
    }, 
    { 
    key: 'male', 
    value: 2000 
    }, 
    { 
    key: 'unknown', 
    value: 150 
    } 
]; 

我想从这些重新排序对象的女性 - >男性 - >未知“到“男 - >女性 - >未知”。

我最初的解决办法是做像这样:

var newAudienceArray = []; 

for (var x = 0; x < myData.length; x++){ 
    if (myData[x].key == 'male'){ 
    newAudienceArray.push(myData[x]); 
    } 
} 

for (var x = 0; x < myData.length; x++){ 
    if (myData[x].key == 'female'){ 
    newAudienceArray.push(myData[x]); 
    } 
} 

for (var x = 0; x < myData.length; x++){ 
    if (myData[x].key == 'unknown'){ 
    newAudienceArray.push(myData[x]); 
    } 
} 

这似乎非常详细。有没有更简洁的解决方案?

回答

4

您可以使用Array.prototype.sort方法:

myData.sort(function (index, data) { 
    return data.key == 'male' ? 2 : data.key == 'female' ? 1 : 0 
}); 
3

您可以用key的值创建一个对象作为键和位置,以使该元素在排序数组中具有值。然后,您可以使用sort()方法按该对象进行排序。

var myData = [{"key":"female","value":1000},{"key":"male","value":2000},{"key":"unknown","value":150}] 
 

 
var sortBy = { 
 
    male: 1, 
 
    female: 2, 
 
    unknown: 3 
 
} 
 

 
var result = myData.sort(function(a, b) { 
 
    return sortBy[a.key] - sortBy[b.key] 
 
}) 
 

 
console.log(result)