我想知道是否有一种方法可以在JavaScript中做一些类似PHP foreach循环的事情。我正在寻找的功能是类似这样的PHP代码片段:

foreach($data as $key => $value) { }

我在看JS for. in循环,但似乎没有办法指定as。如果我用一个'normal' for循环(for(var I = 0;I < data.length;i++),有办法抓取键=>值对吗?


当前回答

ES6将提供Map.prototype.forEach(回调),可以像这样使用

myMap.forEach(function(value, key, myMap) {
                        // Do something
                    });

其他回答

在提出这个问题后的过去几年中,Javascript添加了一些新特性。其中一个是客体。条目的方法。

下面是直接从MDN复制的代码片段


const object1 = {
  a: 'somestring',
  b: 42
};

for (let [key, value] of Object.entries(object1)) {
  console.log(`${key}: ${value}`);
}
var global = (function() {
   return this;
})();

// Pair object, similar to Python

function Pair(key, value) {
    this.key = key;
    this.value = value;

    this.toString = function() {
       return "(" + key + ", " + value + ")";
    };
}

/**
 * as function
 * @param {String} dataName A String holding the name of your pairs list.
 * @return {Array:Pair} The data list filled
 *    with all pair objects.
 */
Object.prototype.as = function(dataName) {
    var value, key, data;
    global[dataName] = data = [];

    for (key in this) {
       if (this.hasOwnProperty(key)) {
          value = this[key];

          (function() {
             var k = key,
                 v = value;

            data.push(new Pair(k, v));
          })();
       }
    }

    return data;
};

var d = {
   'one': 1,
   'two': 2
};

// Loop on your (key, list) pairs in this way
for (var i = 0, max = d.as("data").length; i < max; i += 1) {
   key = data[i].key;
   value = data[i].value;

   console.log("key: " + key + ", value: " + value);
}

// delete data when u've finished with it.
delete data;

如果你正在使用Lodash,你可以使用_.forEach

_.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
  console.log(key + ": " + value);
});
// => Logs 'a: 1' then 'b: 2' (iteration order is not guaranteed).
var obj = {...};
for (var key in obj) {
    var value = obj[key];

}

php语法简直就是糖。

ES6将提供Map.prototype.forEach(回调),可以像这样使用

myMap.forEach(function(value, key, myMap) {
                        // Do something
                    });