我想知道是否有一种方法可以在JavaScript中做一些类似PHP foreach循环的事情。我正在寻找的功能是类似这样的PHP代码片段:
foreach($data as $key => $value) { }
我在看JS for. in循环,但似乎没有办法指定as。如果我用一个'normal' for循环(for(var I = 0;I < data.length;i++),有办法抓取键=>值对吗?
我想知道是否有一种方法可以在JavaScript中做一些类似PHP foreach循环的事情。我正在寻找的功能是类似这样的PHP代码片段:
foreach($data as $key => $value) { }
我在看JS for. in循环,但似乎没有办法指定as。如果我用一个'normal' for循环(for(var I = 0;I < data.length;i++),有办法抓取键=>值对吗?
当前回答
我假设你知道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]。
其他回答
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;
var obj = {...};
for (var key in obj) {
var value = obj[key];
}
php语法简直就是糖。
请尝试以下代码:
<script>
const games = {
"Fifa": "232",
"Minecraft": "476",
"Call of Duty": "182"
};
Object.keys(games).forEach((item, index, array) => {
var msg = item+' '+games[item];
console.log(msg);
});
如果你可以使用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循环也枚举原型链中的属性)。
对象。条目文档 为…的文档 解构分配文档 属性文档的可枚举性和所有权
for (var k in target){
if (target.hasOwnProperty(k)) {
alert("Key is " + k + ", value is " + target[k]);
}
}
hasOwnProperty用于检查目标是否真的具有该属性,而不是从其原型继承该属性。更简单的说法是:
for (var k in target){
if (typeof target[k] !== 'function') {
alert("Key is " + k + ", value is" + target[k]);
}
}
它只是检查k是不是一个方法(如果目标是数组,你会得到很多方法的警告,例如indexOf, push, pop等)。