重新排序和过滤对象数组

时间:2018-05-15 14:54:46

标签: javascript filter

我正在寻找一种简单的方法,不仅可以过滤,还可以重新排序对象数组,以便过滤格式并按正确的顺序排序。这是一个示例数组

[{
  "id": "4",
  "fileName": "fileXX",
  "format": "mp3"
}, {
  "id": "5",
  "fileName": "fileXY",
  "format": "aac"
  }
}, {
  "id": "6",
  "fileName": "fileXZ",
  "format": "opus"
  }
}]

数组可能更长并且包含不同的格式,但目标是始终只允许mp3和aac并且aac在数组中排在第一位。此示例的结果将是

[{
  "id": "5",
  "fileName": "fileXY",
  "format": "aac"
  }
},{
  "id": "4",
  "fileName": "fileXX",
  "format": "mp3"
}]

应避免按字母顺序排序,因为所需的顺序可能会在以后更改。

3 个答案:

答案 0 :(得分:2)

您可以使用所需格式的对象进行过滤,并按所需顺序对其进行排序。

var data = [{ id: "4", fileName: "fileXX", format: "mp3" }, { id: "5", fileName: "fileXY", format: "aac" }, { id: "6", fileName: "fileXZ", format: "opus" }],
    order = { aac: 1, mp3: 2 },
    result = data
        .filter(({ format }) => format in order)
        .sort((a, b) => order[a.format] - order[b.format]);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:1)

您可以尝试这样的事情:

let myResult = array.filter(function(file) { 
    return file.format === 'mp3' || file.format === 'aac'
}).sort(function(a, b){
    if (a.format === b.format) return 0 // same order
    else if (a.format === 'aac') return -1 // a before b
    else return 1 // b before a
})

答案 2 :(得分:0)

您只需过滤相关格式,然后对结果集进行排序

var arr = [
  {
  "id": "4",
  "fileName": "fileXX",
  "format": "mp3"
}, {
  "id": "5",
  "fileName": "fileXY",
  "format": "aac"
  }, {
  "id": "6",
  "fileName": "fileXZ",
  "format": "opus"
  }
]


var filteredArr= arr.filter(item=>item.format === 'mp3' || item.format ==='aac')



filteredArr.sort(function(a,b){
  return a.format > b.format
})

console.log(filteredArr)