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

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

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


当前回答

for (var key in myMap) {
    if (myMap.hasOwnProperty(key)) {
        console.log("key =" + key);
        console.log("value =" + myMap[key]);
    }
}

在javascript中,每个对象都有一堆内置的键值对,其中包含元信息。当你循环遍历一个对象的所有键值对时,你也是在循环遍历它们。使用hasOwnProperty()可以过滤掉这些。

其他回答

为…他会为你工作的。

for( var key in obj ) {
  var value = obj[key];
}

在现代JavaScript中,你也可以这样做:

for ( const [key,value] of Object.entries( obj ) ) {

}

你可以使用'for in'循环来实现:

for (var key in bar) {
     var value = bar[key];
}

我假设你知道I是键,你可以通过data[I]获取值(只是想要一个快捷方式)。

ECMAScript5为数组引入了forEach [MDN](似乎你有一个数组):

data.forEach(function(value, index) {

});

MDN文档为不支持它的浏览器提供了一个缓冲。

当然,这并不适用于对象,但你可以为它们创建一个类似的函数:

function forEach(object, callback) {
    for(var prop in object) {
        if(object.hasOwnProperty(prop)) {
            callback(prop, object[prop]);
        }
    }
}

由于您使用jquery标记了问题,jquery提供了$。每个循环遍历数组和对象结构的[docs]。

for (var key in myMap) {
    if (myMap.hasOwnProperty(key)) {
        console.log("key =" + key);
        console.log("value =" + myMap[key]);
    }
}

在javascript中,每个对象都有一堆内置的键值对,其中包含元信息。当你循环遍历一个对象的所有键值对时,你也是在循环遍历它们。使用hasOwnProperty()可以过滤掉这些。

如果你可以使用ES6本机或与Babel (js编译器),那么你可以做以下事情:

Const test = {a: 1, b: 2, c: 3}; (const [key, value] of Object.entries(test)) { console.log(关键字,值); }

它将打印出以下输出:

a 1
b 2
c 3

object .entries()方法返回给定对象自身的可枚举属性[key, value]对的数组,其顺序与for…In循环(区别在于for-in循环也枚举原型链中的属性)。

对象。条目文档 为…的文档 解构分配文档 属性文档的可枚举性和所有权