Node
не гарантирует порядок индексов массивов. См. Этот вопрос для получения дополнительной информации:
Nodejs Order of properties guarantee
Как указано, мое заявление выше неверно. Правильным утверждением было бы то, что вы не должны передавать по заказу свойства в объект, если вы использовали JSON.stringify()
для преобразования объекта в JSON, а затем отправили его как полезную нагрузку запроса.
Хотя мое первоначальное заявление, по-видимому, неверно, это - проблема - проблема, с которой я столкнулся, - где значения массива отображаются на неправильном заказе на моем сервере, - и я решил это, как показано ниже. Источником проблемы может служить предложение Амита в комментариях выше. В частности, это ваш javascript на стороне клиента, который изначально не вводит файлы в том порядке, который вы ожидаете.
Независимо от причины вам придется выполнить некоторую работу на стороне клиента, чтобы добавить «искусственный» индекс в каждый файл, а затем передать их как массив объектов.
Таким образом, вместо этого:
var files = ['file1.jpg','file2.jpg','file3.jpg'];
Вам нужно передать объект в ваш бэкэнд так:
var files = [
{ index : 0, file : 'file1.jpg' },
{ index : 1, file : 'file2.jpg' },
{ index : 2, file : 'file3.jpg' },
];
И тогда вам нужно отсортировать массив объектов сразу он получил по экземпляру бэкэнд, так как:
files.sort(function(a, b) {
return a.index - b.index;
});
И тогда вы можете петлю через files
массив и делать то, что вы:
var justFiles = [];
async.each(files, function(file, iterate){
justFiles.push(file.file);
return iterate();
}, function(result){
console.log(justFiles);
});
И выход был бы:
'file1.jpg','file2.jpg','file3.jpg'
Вы уверены, запрос имеет порядок вы ожидаете? (Для этого используйте сетевой монитор - например, wirehark). При использовании промежуточного программного обеспечения 'array' файлы вставляются в массив в порядке их анализа. Не должно быть причины, чтобы это было иначе, чем порядок в запросе – Amit
Я использовал Fiddler 2. Запрос всегда в том же порядке. Когда я получаю его от мультера, он находится в случайном порядке. Я хочу получить первоначальный заказ от самого запроса, чтобы я мог сортировать эти файлы соответствующим образом. – Jordan
Я не могу воспроизвести это, я всегда получаю файлы в том порядке, в котором они загружаются (что имеет смысл, как и @Amit говорит, файлы вставляются в массив в порядке их разбора). Есть ли у вас какое-либо другое промежуточное ПО, которое может быть причиной этого? Вы пытались создать [mcve] (https://stackoverflow.com/help/mcve)? – robertklep