1 (изменено: wisgest, 2008-02-18 09:40:45)

Тема: JScript: Функция, имитирующая цикл For Each в VBScript

Описав функцию

function ForEachItem(Items, Do) {
  with (new Enumerator(Items))
    for (; !atEnd(); moveNext()) if (Do(item())) break;
}

можно VBScript-цикл

For Each element In group
    [операторы]
    [Exit For]
    [операторы]
Next

переписать на JScript так

ForEachItem(group,
  function (element) {
    [операторы]
    [return true;]
    [операторы]
  }
);

Примеры использования ForEachItem():

var Result="";
var fso=new ActiveXObject("Scripting.FileSystemObject");

ForEachItem(fso.GetFolder("C:\\Program Files").SubFolders,
  function (Folder) {Result+=Folder.Name+"\n";}
);
WScript.Echo(Result);
ForEachItem([10, -20, 30, 40, 0, 50], function (a) {
  if (a<0) return; //continue
  if (a==0) return true; //break
  WScript.Echo(a);}
);
var Result="";
var Shell=new ActiveXObject("Shell.Application");

ForEachItem(Shell.NameSpace("C:\\").Items(),
  function (FolderItem) {Result+=FolderItem.Path+"\n";}
);
WScript.Echo(Result);
var Shell=new ActiveXObject("Shell.Application");

ForEachItem(Shell.Windows(), function (IE) {
  if (IE) WScript.Echo(IE.LocationURL);}
);

Следует заметить, что переменные, описанные непосредственно в «теле цикла», будут сохранять свои значения только до конца текущей итерации.