Метод .filter()
можно использовать вместо .some()
для получения списка элементов, включенных в строку message
. Это, в свою очередь, может быть использовано для отображения хобби в сообщении.
Логика будет включать дополнительную проверку, чтобы убедиться, что длина отфильтрованного списка не пуста, прежде чем записать результат на консоль:
var hobby = ["sport", "art", "music"];
var message = "I love sport!";
// Use .filter instead of .some
var result = hobby.filter(el => message.includes(el));
// If result not empty, log the result to console
if (result.length > 0) {
console.log("a hobby or hobbies are included:", result);
// To find matching indicies
const matchingIndicies = hobby
.map((str, index) => ({ str, index }))
.filter((item) => message.includes(item.str))
.map((item) => (item.str + ' at index ' + item.index));
console.log("matching indicies:", matchingIndicies)
// tell me which hobby or hobbies here
}
Мы используем окна свойств для выполнения этого. Единственное окно свойств может быть присвоено всем проектам в решении. С тех пор можно изменить настройки в том одном окне свойств, и оно будет влиять на все проекты.
Усовершенствованная подсказка: Мы на самом деле используем несколько окон свойств, (например, один для целевых типов выпуска, один для типов целевого объекта отладки). Подсказка - то, что порядок очень важен. При редактировании файлов проекта вручную затем, последнее окно свойств переопределит настройки в предыдущих окнах свойств в списке. Если Вы редактируете в GUI, то TOP каждый переопределяет тех ниже его.
Как другие предположили, окна свойств могут сделать то, что Вы хотите. Прием должен использовать InheritedPropertySheets
поскольку Вы использовали бы #include
в C++.Примечание: XML немного отличается для файлов проекта и файлов окна свойств. Вот изобретенный и упрощенный пример двух проектов (prjA.vcproj
и prjB.vcproj
) включая то же окно свойств (sln.vsprops
) который самостоятельно включает другого (strict.vsprops
):
strict.vsprops
<VisualStudioPropertySheet ...>
<Tool Name="VCCLCompilerTool" WarningLevel="3" WarnAsError="true"/>
</VisualStudioPropertySheet>
sln.vsprops
<VisualStudioPropertySheet ... InheritedPropertySheets=".\strict.vsprops">
<Tool
Name="VCCLCompilerTool"
PreprocessorDefinitions="NOMINMAX=1"
RuntimeTypeInfo="true"
/>
</VisualStudioPropertySheet>
prjA.vcproj
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
prjB.vcproj
<VisualStudioProject ...>
<Configurations>
<Configuration ... InheritedPropertySheets=".\sln.vsprops">
</Configuration>
</Configurations>
...
</VisualStudioProject>
Можно также найти этот вопрос и его ответы полезными.
Возможно, Вы могли добавить файл MSBuild к своему решению, в котором Вы определяете много общих свойств и затем <Импорта> что файл во все Ваши реальные проекты?
Таким образом, в Ваших "настройках" файл MSBuild Вы определяете много свойств:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WinUnitIncludeDir>C:\Includes\WinUnit</WinUnitIncludeDir>
<!-- Other shared properties go here -->
</PropertyGroup>
</Project>
Из Ваших реальных проектов можно затем обратиться к этому:
<Project ...>
...
<Import Project="path/to/settings.msbuild" />
...
<Configurations>
<Configuration ...>
<Tool Name="VCCLCompilerTool"
...
AdditionalIncludeDirectories="$(WinUnitIncludeDir)"
... />
...
...
...
</Project>
Я искал точно то же самое некоторое время назад, но не нашел точно, что я хотел.
Единственной вещью, которая могла бы быть близко к этой функции, являются Окна свойств. Это не точно глобально, поскольку это принадлежит проекту и используется другими.
As suggested, you should look at Property Sheets (aka .vsprops files).
I wrote a very short introduction to this feature here.