Подтвердить что ты не робот

Node.js: для каждого... в нерабочем состоянии

Я хотел использовать for each ... in с Node.js(v0.4.11).

Я использую его следующим образом:

var conf = {
   index: {
      path: {
         first: "index.html",
         pattern: "index/{num}.html"
      },
      template: "index.tpl",
      limit: 8
   },
   feed: {
      path: "feed.xml",
      template: "atom.tpl",
      limit: 8
   }
}

for each (var index in conf) {
  console.log(index.path);
}

Я получаю следующую ошибку:

        for each (var index in conf) {
     ^^^^

node.js:134
        throw e; // process.nextTick error, or 'error' event on first tick
        ^
SyntaxError: Unexpected identifier
    at Module._compile (module.js:397:25)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)
    at require (module.js:346:19)
    at Object.<anonymous> (/home/paul/dev/indexing/lib/Index.js:3:13)
    at Module._compile (module.js:402:26)
    at Object..js (module.js:408:10)
    at Module.load (module.js:334:31)
    at Function._load (module.js:293:12)

Где ошибка? for each ... in поддерживается с Javascript 1.6.

Для получения информации об использовании for each ... in см. MDN.

4b9b3361

Ответ 1

К сожалению, node не поддерживает for each ... in, хотя он указан в JavaScript 1.6. Chrome использует тот же механизм JavaScript и сообщается как, имеющий аналогичный недостаток.

Вам нужно согласиться на array.forEach(function(item) { /* etc etc */ }).

EDIT: с официального сайта Google V8:

V8 реализует ECMAScript, как указано в ECMA-262.

На том же веб-сайте MDN, где говорится, что for each ...in находится в JavaScript 1.6, он говорит, что он не находится в какой-либо версии ECMA - следовательно, по-видимому, его отсутствие от Node.

Ответ 2

for (var i in conf) {
  val = conf[i];
  console.log(val.path);
}

Ответ 3

https://github.com/cscott/jsshaper внедряет переводчика с JavaScript 1.8 в ECMAScript 5.1, который позволит вам использовать "для каждого" в коде, запущенном на веб-кайте или node.

Ответ 4

Нет версии for each in в версии ECMAScript, поддерживаемой Node.js, только поддерживаемой firefox в настоящее время.

Важно отметить, что версии JavaScript применимы только к Gecko (движок Firefox) и Rhino (который всегда имеет несколько версий). Node использует V8, который следует спецификациям ECMAScript

Ответ 5

Это может быть старый вариант, но просто для того, чтобы обновлять информацию, в javascript есть метод forEach, который работает с NodeJS. Здесь ссылка из документации. И пример:

     count = countElements.length;
        if (count > 0) {
            countElements.forEach(function(countElement){
                console.log(countElement);
            });
        }

Ответ 6

для тех, кто использовал php:

//add this function
function foreach(arr, func){
  for(var i in arr){
    func(i, arr[i]);
  }
}

использование:

foreach(myArray, function(i, v){
  //run code here
});

похож на версию php:

foreach(myArray as i=>v){
  //run code here
}