Здесь много хороших ответов, но я хотел бы отметить, что их можно очень просто расширить, чтобы добиться более сложной сортировки. Единственное, что вам нужно сделать, это использовать оператор OR для цепочки сравнения, например:
objs.sort((a,b)=> fn1(a,b) || fn2(a,b) || fn3(a,b) )
Где fn1
, fn2
, ... являются функциями сортировки, которые возвращают [- 1,0,1]. Это приводит к «сортировке по fn1», «сортировке по fn2», которая в значительной степени равна ORDER BY в SQL.
Это решение основано на поведении оператора ||
, который оценивает значение первое оцениваемое выражение, которое может быть преобразовано в true .
Простейшая форма имеет только одну встроенную функцию:
// ORDER BY last_nom
objs.sort((a,b)=> a.last_nom.localeCompare(b.last_nom) )
Имея два шага с last_nom
, порядок сортировки first_nom
будет выглядеть так:
// ORDER_BY last_nom, first_nom
objs.sort((a,b)=> a.last_nom.localeCompare(b.last_nom) ||
a.first_nom.localeCompare(b.first_nom) )
Общая функция сравнения может быть примерно такой:
// ORDER BY
let cmp = (a,b,n)=>a[n].localeCompare(b[n])
Эта функция может быть расширена для поддержки числовых полей , чувствительность к регистру, произвольные типы данных и т. д.
Вы можете использовать его с привязкой к ним по приоритету сортировки:
// ORDER_BY last_nom, first_nom
objs.sort((a,b)=> cmp(a,b, "last_nom") || cmp(a,b, "first_nom") )
// ORDER_BY last_nom, first_nom DESC
objs.sort((a,b)=> cmp(a,b, "last_nom") || -cmp(a,b, "first_nom") )
// ORDER_BY last_nom DESC, first_nom DESC
objs.sort((a,b)=> -cmp(a,b, "last_nom") || -cmp(a,b, "first_nom") )
. Дело в том, что чистый JavaScript с функциональным подходом может принять вас долгий путь без внешних библиотек или сложного кода. Это также очень эффективно, так как не нужно выполнять синтаксический анализ строк
У меня возникла похожая проблема, когда «метаданные не найдены». В свойстве решения убедитесь, что флажок «build» отмечен в Build / Configuration Manager для каждого проекта.
У меня была эта проблема, не уверенная, если она поможет, но мой был вызван при наличии двух различных версий того же проекта, на который ссылаются два различных решения. Когда я создал решение со ссылкой на корректный проект сначала, второе решение создаст прекрасный, однако, если бы я убрал первое решение и попытался создать второе решение, то это перестало бы работать с этими dll ссылочными сообщениями об ошибках.
решение для меня выясняло, что у меня было два проекта с тем же именем, которое было случайно дублировано и удаление ссылки на старый неправильный проект и добавление ссылки на новую.
В любом случае кажется, что эти сообщения являются определенным отвлекающим маневром, я проверил бы Ваш вывод сборки и нашел бы первый проект, которому не удается создать и очень тщательно проверить ссылки на том проекте.
Произошло то же самое. У меня есть несколько решений, относящихся к одним и тем же проектам библиотеки (.net 3.5). Я заметил, что когда один был построен в отладочной / нормальной конфигурации, а другой с использованием другой директивы компилятора (sqlite / local mode), это могло произойти. Просто создайте оба проекта с одинаковыми директивами, и все будет в порядке.
Обычно это вызвано тем, что проект упоминается в другом решении, нежели тот, который выдает ошибку. Если вы очистите другое решение или разветвите код, вы, скорее всего, увидите эту ошибку. Решение состоит в том, чтобы прокрутить список ошибок типа «метаданные не найдены» и посмотреть ссылки на проекты. 9 из 10 раз вы увидите неработающую ссылку на проект, которого нет в этом решении. Добавьте проекты, чтобы исправить опорные ошибки, и перестройте. Это должно исправить это.
(Я столкнулся с этим сегодня, и сталкивался с этим в прошлом, и это ВСЕГДА работало)
В прошлом, как в VS2005, так и сейчас в VS2008 я обходил это, чтобы убедиться, что все зависимости верны, а ссылки указывают на проекты, а не на библиотеки DLL. Затем пройдите и вручную соберите каждый проект в порядке зависимости. После того, как последняя сборка будет построена, вы можете запустить полную сборку решения и все будет в порядке.
Этот ответ предназначен для использования в будущем другими, поскольку я знаю, что этому вопросу более 15 месяцев.
Ура
Если вы добавили в решение новый проект, убедитесь, что он есть в списке сборки (см. диспетчер конфигурации)
Я столкнулся с проблемой сохранения, когда хотел включить файл dll, сгенерированный Matlab. И я, наконец, решил эту проблему, скопировав .ctf файл, что означает сертификат, я полагаю, и .netmodule, который необходим для правильной работы .dll, вместе с .dll файлом. И это действительно сработало! Итак, я предлагаю проверить, нужны ли .dll какие-либо другие файлы для совместной работы.
У меня есть пара замечаний.
Если вы полагаетесь на файл решения в качестве файла сборки в MSBuild, убедитесь, что вы добавляете проекты в файл решения в том порядке, в котором вы хотите, чтобы они строились, т. Е. На основе порядка взаимной зависимости проектов. Это становится очень важным, если у вас есть проекты в решении, от которых зависят другие проекты, но ссылки были добавлены как «Ссылки», а не как «Ссылки на проекты».
Вам следует избегать этого, как чумы, но в случае, если вам все же нужно это сделать, по крайней мере, убедитесь, что зависимые проекты появляются раньше в файле решения.
Вы должны помнить, что способ создания порядка сборки в Visual Studio не совсем такой, как в MSBuild. Это связано с тем, что MSBuild в первую очередь зависит от файла проекта, чтобы сообщить ему, каковы зависимости, тогда как Visual Studio также может сохранить их в файле решения. Таким образом, иногда можно увидеть ситуации, когда Visual Studio создает решение идеально, но MSBuild просто не может этого сделать.
У меня было несколько случаев, когда мне приходилось вручную настраивать порядок, в котором проекты появляются в файле решения, а также порядок, в котором проекты были перечислены в элементе ProjectReferences в проекте веб-сайта в решении. файл.
Я надеюсь, что приведенная выше информация поможет.