JS Bin ----------------- JS-код ------------
var targetDiv = document.getElementById('content'); var htmlContent = ''; function populateData(event){ switch(event.target.value){ case 'A':{ htmlContent = 'Content for A'; break; } case 'B':{ htmlContent = "content for B"; break; } } targetDiv.innerHTML = htmlContent; }
Step1: on click of the radio button it calls function populate data, with event (an object that has event details such as name of the element, value etc..); Step2: I extracted the value through event.target.value and then simple switch will give me freedom to add custom text.
Live Code
Я думаю, вы могли бы использовать параметр ExpandProperty
в Select-Object
.
Например, чтобы получить список текущего каталога и просто отобразить свойство Name, следующее:
ls | select -Property Name
Это все еще возвращает объекты DirectoryInfo или FileInfo. Вы всегда можете проверить тип, проходящий через трубопровод, по трубопроводу до Get-Member (псевдоним gm
).
ls | select -Property Name | gm
Итак, чтобы развернуть объект должен быть типом свойства, которое вы ищете, вы можете сделать следующее:
ls | select -ExpandProperty Name
В вашем случае вы можете просто сделать следующее, чтобы переменная была массивом строк, где строки являются свойством Name:
$objects = ls | select -ExpandProperty Name
В дополнение к ранее имеющимся полезным ответам с указанием того, когда использовать этот подход и сравнение производительности.
$objects.Name(PSv3 +), как показано в ответе rageandqq , который синтаксически проще и намного быстрее. Доступ к свойству на уровне коллекции для получения значений членов в качестве массива называется перечислением членов и является функция PSv3 + ; Компромиссы: как входной массив сбора, так и выходной массив должны вписываться в память в целом . Если входная коллекция сама является результатом команды (конвейера) (например,
(Get-ChildItem).Name
), эта команда должна сначала выполняться до завершения до того, как будут доступны элементы результирующего массива. $objects | Select-Object -ExpandProperty Name. Необходимость в
-ExpandProperty
объясняется в ответ Скотта Саада . Вы получаете обычные преимущества конвейера от обработки по одному, что, как правило, дает выход сразу и сохраняет постоянство памяти (если вы в конечном итоге не собираете результаты в памяти). Компромисс: использование трубопровода сравнительно медленное . Для коллекций ввода small (массивы) вы, вероятно, не заметите разницы и, особенно в командной строке, иногда можете ввести команду легко становится более важным.
Вот простая альтернатива, которая, однако, является самым медленным ; он использует упрощенный синтаксис , называемый оператором (опять же, PSv3 +):; например, следующее решение PSv3 + легко добавляется к существующей команде:
$objects | % Name # short for: $objects | ForEach-Object -Process { $_.Name }
Для полноты: малоизвестный оператор коллекции PSv4 + .ForEach()
- еще одна альтернатива:
# By property name (string):
$objects.ForEach('Name')
# By script block (much slower):
$objects.ForEach({ $_.Name })
ForEach-Object
. Ниже приведены временные интервалы выборки для различных подходов на основе входного набора объектов 100,000
; абсолютные цифры не важны и варьируются в зависимости от многих факторов, но это должно дать вам представление о относительном :
Approach Seconds
-------- -------
$objects.ForEach('Number') 0.060
$objects.Number 0.065
$objects | Select-Object -ExpandProperty Number 0.859
$objects.ForEach({ $_.Number }) 1.008
$objects | % Number 4.380
Select-Object -Expand
) превосходит коллекцию-operat [-g39] [-40] % Number
на основе сценария % Number
, которая является наихудшим из обоих миров: конвейер, который использует блок сценария на каждой итерации (как указано, % Number
является эквивалентом % { $_.Number }
). Примечание. Интересно, что с тем же тестом в PowerShell Core v6.0.2 на macOS дает другое ранжирование (хотя основное наблюдение за тем, что все еще более медленные конвейеры все еще применяются): перечисление членов происходит быстрее, и даже решение на основе сценария .ForEach()
заметно быстрее, чем Select-Object -ExpandProperty
.
Исходный код f или тестов:
# Number of input objects to create.
$count = 1e5 # 100,000
# Create sample input objects.
$objects = 1..$count | % { [pscustomobject] @{ Number = $_ } }
# An array of script blocks with the various approaches.
$approaches = { $objects | Select-Object -ExpandProperty Number },
{ $objects | % Number },
{ $objects.ForEach('Number') },
{ $objects.ForEach({ $_.Number }) },
{ $objects.Number }
# Time the approaches and sort them by execution time (fastest first):
$approaches | % {
$scriptBlock = $_
Measure-Command $scriptBlock |
Select-Object @{ n='Approach'; e = { $scriptBlock.ToString() } } , Ticks
} |
Sort-Object Ticks |
Format-Table Approach, @{ n = 'Seconds'; e = { '{0:N3}' -f ($_.Ticks / 1e7) } }
В качестве еще более простого решения вы можете просто использовать:
$results = $objects.Name
Который должен заполнить $results
массивом всех значений свойств «Имя» элементов в $objects
.
Exchange Management Shell
. При использовании Exchange нам нужно использовать $objects | select -Property Propname, OtherPropname
– Bassie
2 August 2016 в 14:03