Сделайте так: -
var peoples = [
{ "name": "bob", "dinner": "pizza" },
{ "name": "john", "dinner": "sushi" },
{ "name": "larry", "dinner": "hummus" }
];
$.each(peoples, function(i, val) {
$.each(val, function(key, name) {
if (name === "john")
alert(key + " : " + name);
});
});
name : john
См. LIVE DEMO
Это может на самом деле быть сделано довольно легко с чистыми собственными командами, просто необходимо знать, как использовать более хитрых из них. Нет смысла во внешних инструментах как VBScript или противных побочных эффектах как очистка экрана необходимо.
то, Что Вы ищете, является эквивалентом удара" echo -n
" команда, которая производит строку без новой строки. В пакете XP это достигается при помощи" set /p
" (попросите у пользователя ответа с подсказкой) с пустым входом следующим образом:
<nul (set /p junk=Hello)
echo. again.
произведет строку "Привет снова". без прошедшей новой строки.
, Что прием (и использование CTRL-H, символ возврата виден в следующем сценарии тестирования, который запускает (один за другим) 10-секундную подзадачу с 20 вторых тайм-аутов и 15-секундную подзадачу с 10 вторыми тайм-аутами.
сценарий полезной нагрузки создается фактическим под управлением сценарием, и его единственное требование - то, что он делает работу, которую он должен сделать, затем удаляют файл флага по окончании, так, чтобы функция монитора смогла обнаружить его.
Имеют в виду, что строки ^H в этом сценарии являются на самом деле символами CTRL-H, ^ | является двумя отдельными символами, используемыми для выхода из символа вертикальной черты.
@echo off
:: Localise environment.
setlocal enableextensions enabledelayedexpansion
:: Specify directories. Your current working directory is used
:: to create temporary files tmp_*.*
set wkdir=%~dp0%
set wkdir=%wkdir:~0,-1%
:: First pass, 10-second task with 20-second timeout.
del "%wkdir%\tmp_*.*" 2>nul
echo >>"%wkdir%\tmp_payload.cmd" ping 127.0.0.1 -n 11 ^>nul
echo >>"%wkdir%\tmp_payload.cmd" del "%wkdir%\tmp_payload.flg"
call :monitor "%wkdir%\tmp_payload.cmd" "%wkdir%\tmp_payload.flg" 20
:: Second pass, 15-second task with 10-second timeout.
del "%wkdir%\tmp_*.*" 2>nul:
echo >>"%wkdir%\tmp_payload.cmd" ping 127.0.0.1 -n 16 ^>nul
echo >>"%wkdir%\tmp_payload.cmd" del "%wkdir%\tmp_payload.flg"
call :monitor "%wkdir%\tmp_payload.cmd" "%wkdir%\tmp_payload.flg" 10
goto :final
:monitor
:: Create flag file and start the payload minimized.
echo >>%2 dummy
start /min cmd.exe /c "%1"
:: Start monitoring.
:: i is the indicator (0=|,1=/,2=-,3=\).
:: m is the number of seconds left before timeout.
set i=0
set m=%3
<nul (set /p z=Waiting for child to finish: ^|)
:: Loop here awaiting completion.
:loop
:: Wait one second.
ping 127.0.0.1 -n 2 >nul
:: Update counters and output progress indicator.
set /a "i = i + 1"
set /a "m = m - 1"
if %i% equ 4 set i=0
if %i% equ 0 <nul (set /p z=^H^|)
if %i% equ 1 <nul (set /p z=^H/)
if %i% equ 2 <nul (set /p z=^H-)
if %i% equ 3 <nul (set /p z=^H\)
:: End conditions, complete or timeout.
if not exist %2 (
echo.
echo. Complete.
goto :final
)
if %m% leq 0 (
echo.
echo. *** ERROR: Timed-out waiting for child.
goto :final
)
goto :loop
:final
endlocal
Если Вы не возражаете, экран, очищающийся..., пробуют это:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=1
START CALC
:BEGIN
CLS
IF !COUNT! EQU 1 ECHO \
IF !COUNT! EQU 2 ECHO -
IF !COUNT! EQU 3 ECHO /
IF !COUNT! EQU 4 ECHO -
IF !COUNT! EQU 4 (
SET COUNT=1
) ELSE (
SET /A COUNT+=1
)
PSLIST CALC >nul 2>&1
IF %ERRORLEVEL% EQU 1 GOTO END
GOTO BEGIN
:END
РЕДАКТИРОВАНИЕ: Этот образец запустит Калькулятор и затем отобразит "счетчик", пока Вы не закроете Калькулятор. Я использую pslist для проверки на существование CALC.EXE. > nul 2> & 1 перенаправления STDOUT и STDERR к nul, таким образом, ничто от PSLIST не будет отображено.
Если я понимаю Ваш вопрос, Вы хотите счетчик, потому что некоторая операция, которую Вы выполняете, занимает время, и Вы хотите показать пользователю, что что-то происходит, правильно?
В этом случае, насколько я знаю, не возможный с собственными командами. (могло быть возможно, если бы у Вас была программа, которая показала счетчик при выполнении операции, которые занимают много времени)
, И похоже, что эхо не поддерживает ansi escape-последовательности (в былые времена, у Вас должен был быть загруженный ansi.sys, не знайте, существует ли это все еще), таким образом, Вы не можете использовать ansi для управления курсором.
Если Вы имеете в виду в рамках сценария пакетной обработки Windows, Вы не можете сделать этого исходно. Оператор эха, используемый для печати к консоли, будет всегда печатать новую строку, и Вы не можете переместить курсор.
Это - определенный взлом, но можно сделать это с комбинацией VBScript и сценария пакетной обработки.
Этот VBScript распечатает клавишу Backspace, затем это - аргумент:
WScript.StdOut.Write(chr(8) & WScript.Arguments(0))
Помещенный это в файл, vbsEcho.vbs
, затем называет этот сценарий из Вашего сценария пакетной обработки. Следующий сценарий пакетной обработки будет продолжать отображать счетчик, пока Вы не нажмете CTRL-C:
@echo off
:LOOP
cscript //nologo vbsEcho.vbs "\"
cscript //nologo vbsEcho.vbs "|"
cscript //nologo vbsEcho.vbs "/"
cscript //nologo vbsEcho.vbs "-"
goto :LOOP
РЕДАКТИРОВАНИЕ: Используя некоторые идеи из ответа aphoria, этот сценарий запустит калькулятор Windows и отобразит счетчик, пока калькулятор не закроется:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET COUNT=1
START CALC
cscript //nologo vbsEcho.vbs "Calculating: \"
:LOOP
IF !COUNT! EQU 1 cscript //nologo vbsEcho.vbs "|"
IF !COUNT! EQU 2 cscript //nologo vbsEcho.vbs "/"
IF !COUNT! EQU 3 cscript //nologo vbsEcho.vbs "-"
IF !COUNT! EQU 4 (
cscript //nologo vbsEcho.vbs "\"
set COUNT=1
) else (
set /a COUNT+=1
)
pslist CALC >nul 2>&1
if %ERRORLEVEL% EQU 1 goto :end
goto :LOOP
:END
cscript //nologo vbsEcho.vbs ". Done."
Можно использовать счетчик, который печатает другой символ от данного набора (как "\|/-"), и Вы изменяете символ согласно подобному "счетчику по модулю 4". Так или иначе Вы не говорите, в котором языке Вы работаете в том, таким образом, немного трудно быть более точным.
РЕДАКТИРОВАНИЕ: теперь, когда мы знаем, в которой среде Вы играете в, я сказал бы, что the Bat / язык CMD не действительно до задачи... Я рекомендовал бы любой язык сценариев, при этом Ruby был бы моим фаворитом.
Счетчик CAN быть сделанными в сценарии пакетной обработки, Вам просто нужны некоторые переменные:
@echo off
:spinner
set mSpinner=%mSpinner%.
if %mSpinner%'==..............................' set mSpinner=.
cls
echo %mSpinner%
rem Check if the process has finished via WMIC and/or tasklist.
goto spinner
:exit
Для самой the Bat для обнаружения выполнения/выходов процесса. Можно сделать это через интерфейс командной строки WMI или команду списка задач которого у меня есть ограниченные знания.
, Если это вернулось в дни DOS, Вы могли даже делать это, не очищая экран... за исключением использования некоторой комбинации символов ESC. Я не знаю, возможно ли это все еще на Vista/XP.
: ПЕТЛЯ ECHOX -n "~ r% Обработка ..." ЕСЛИ% CTR% EQU 4 SET / A CTR = 0 ЕСЛИ% CTR% == 0 (set / p DOT = ³)
Я считаю, что самый простой способ - обновить заголовок - таким образом вам не придется постоянно выполнять CLS .
Причина для двух строк ping -n в том, что для ping быстрее выполнить двойной ping в секунду каждая по сравнению с одним ping в две секунды.
Также для тех, кто этого не делает. знаете, a :: - то же самое, что и REM, за исключением того, что комментарии игнорируются в начале синтаксического анализатора (я думаю, что это правильное слово), а не в конце. Проще говоря, эта строка игнорируется.
:: begin spin.cmd
@echo off
setlocal
set COUNT=0
set MAXCOUNT=10
set SECONDS=1
:LOOP
title "\"
call :WAIT
title "|"
call :WAIT
title "/"
call :WAIT
title "-"
if /i "%COUNT%" equ "%MAXCOUNT%" goto :EXIT
set /a count+=1
echo %COUNT%
goto :LOOP
:WAIT
ping -n %SECONDS% 127.0.0.1 > nul
ping -n %SECONDS% 127.0.0.1 > nul
goto :EOF
:EXIT
title FIN!
endlocal
:: end spin.cmd
paxdiablos имеет удивительный ответ, но необходимость повторять ваши команды в файле полезной нагрузки раздражает. Это трудно читать и трудно отлаживать. Я взял его код и немного изменил его для собственного использования:
@echo off
:: Localise environment.
setlocal enableextensions enabledelayedexpansion
set wkdir=%~dp0%
set wkdir=%wkdir:~0,-1%
set done_flag="%wkdir%\tmp_payload.flg"
set timeout=7
:controller
IF (%1)==() (
call :monitor step1 "Getting stuff from SourceSafe: "
call :monitor step2 "Compiling some PHP stuff: "
call :monitor step3 "Finishing up the rest: "
) ELSE ( goto %1 )
goto final
:step1
::ping for 5 seconds
ping 127.0.0.1 -n 6 >nul
del "%wkdir%\tmp_payload.flg"
goto final
:step2
::ping for 10 seconds
ping 127.0.0.1 -n 11 >nul
del "%wkdir%\tmp_payload.flg"
goto final
:step3
::ping for 5 seconds
ping 127.0.0.1 -n 6 >nul
del "%wkdir%\tmp_payload.flg"
goto final
:monitor
:: Create flag file and start the payload minimized.
:: echo the word "dummy" to the flag file (second parameter)
echo >>%done_flag% dummy
:: start the command defined in the first parameter
start /min cmd.exe /c "test2.bat %1"
:: Start monitoring.
:: i is the indicator (0=|,1=/,2=-,3=\).
:: m is the number of seconds left before timeout.
set i=0
set m=%timeout%
set str=%2
for /f "useback tokens=*" %%a in ('%str%') do set str=%%~a
<nul (set /p z=%str%^|)
:: Loop here awaiting completion.
:loop
:: Wait one second.
ping 127.0.0.1 -n 2 >nul
:: Update counters and output progress indicator.
set /a "i = i + 1"
set /a "m = m - 1"
if %i% equ 4 set i=0
if %i% equ 0 <nul (set /p z=^|)
if %i% equ 1 <nul (set /p z=/)
if %i% equ 2 <nul (set /p z=-)
if %i% equ 3 <nul (set /p z=\)
:: End conditions, complete or timeout.
if not exist %done_flag% (
::echo.
echo Complete
goto :final
)
if %m% leq 0 (
echo.
echo. *** ERROR: Timed-out waiting for child.
goto :final
)
goto :loop
:final
endlocal
/usr/share/git-core/template
, и это приводит к тому же самому результату – Geoffrey Bachelet 27 January 2010 в 04:45