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
是不是一个方法(如果target
是array
你会得到很多方法提醒,例如indexOf
, push
, pop
等)。
没有人提到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;