根据特定键值重新排序javascript对象

时间:2017-04-05 09:42:48

标签: javascript json object refactoring

这是我的数据集

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

我想从'女性重新排序这些对象 - >男性 - >未知'到男性 - >女性 - >未知&#39 ;.

我原来的解决方案是这样做的:

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]);
  }
}

这看起来非常冗长。有更简洁的解决方案吗?

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

您可以创建一个对象,其中key的值为关键,并且您希望该元素在排序数组中的位置为值。然后,您可以使用sort()方法按该对象进行排序。

&#13;
&#13;
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)
&#13;
&#13;
&#13;