For …在JavaScript中的循环 – 键值对

我想知道是否有办法像JavaSript中的PHP foreach循环。 我正在寻找的function是这样的:(PHP片段)

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

我正在寻找JS for..in循环,但似乎没有办法指定as 。 如果我用“正常”循环( for(var i = 0; i < data.length; i++ ))来做这件事,是否有办法获取key =>值对?

 for (var k in target){ if (target.hasOwnProperty(k)) { alert("Key is " + k + ", value is" + target[k]); } } 

hasOwnProperty被用来检查你的target真的有这个属性,而不是从它的原型inheritance它。 有点简单的是:

 for (var k in target){ if (typeof target[k] !== 'function') { alert("Key is " + k + ", value is" + target[k]); } } 

它只是检查k是不是一个方法(如果targetarray你会得到很多方法提醒,例如indexOfpushpop等)。

没有人提到Object.keys所以我会提到它。

 Object.keys(obj).forEach(function (key) { // do something with obj[key] }); 

For for in将会为你工作。 如果你把一个对象看作一个地图:

 for(key in obj){ // The key is key // The value is obj[key] } 
 var obj = {...}; for (var key in obj) { var value = obj[key]; } 

PHP的语法只是糖。

如果你可以使用ES6本身或与Babel (JS编译器),那么你可以做到以下几点:

 let test = {a: 1, b: 2, c: 3}; for (let [key, value] of Object.entries(test)) { console.log(key, value); } 

哪个会打印出这个输出:

 a 1 b 2 c 3 
  • Object.entries文档
  • 为…文件
  • 解构赋值文档

希望能帮助到你! =)

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

ECMAScript5 forEach [MDN]为数组引入(看起来你有一个数组):

 data.forEach(function(value, index) { }); 

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

当然,这不适用于对象,但是可以为它们创build一个类似的function:

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

由于您用jquery标记了问题,因此jQuery提供了$.each [docs] ,它循环使用数组和对象结构。

你可以使用for..in

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

在JavaScript中,每个对象都有一堆内置的具有元信息的键值对。 当你循环遍历所有的键值对的对象。 hasOwnProperty()的使用过滤出来。

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

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

你可以使用'for in'循环:

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

下面是一个尽可能接近你的例子。

 for(var key in data){ var value = data[key]; //your processing here } 

如果您使用jQuery,请参阅: http : //api.jquery.com/jQuery.each/

是的,你也可以在javascript中使用关联数组:

 var obj = { name:'some name', otherProperty:'prop value', date: new Date() }; for(i in obj) { var propVal = obj[i]; // i is the key, and obj[i] is the 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;