Переупорядочить и отфильтровать массив объектов - PullRequest
0 голосов
/ 15 мая 2018

Я ищу простой способ не только фильтровать, но и переупорядочивать массив объектов, чтобы исходящие форматы фильтровались и сортировались в правильном порядке. Вот пример массива

[{
  "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 голосов
/ 15 мая 2018

Вы можете попробовать что-то вроде этого:

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
})
0 голосов
/ 15 мая 2018

Вы можете просто отфильтровать по связанным форматам и затем отсортировать по результирующему набору

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)
0 голосов
/ 15 мая 2018

Вы можете фильтровать по объекту нужных форматов и сортировать его по требуемому порядку.

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; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...