以下在JS中工作正常:
function GetArray() { return ["x","y","z"]; }
var tmp = GetArray();
var s = "";
for (var i in tmp) { s += i+" = "+tmp[i]+"\n"; }
alert(s);
给出了:
0 = x
1 = y
2 = z
现在不是将GetArray()的结果存储在临时变量中,而是通过直接评估for(...)部分中的GetArray来实现这一点吗?
我是这样的意思:
for (var i in GetArray()) { /* ??? */ }
除非在这种情况下,我不知道如何获取数组的元素[i],因为没有明确的变量名称可以引用?
显然我不做GetArray()[i]
,因为GetArray每一步都被重新处理,这是低效的,其结果甚至可能会改变(不是在这个简化的例子中,而是一般)。
在PHP中有foreach(SomeExpression() as $index => $value)
的概念,JS中是否存在等价物?
答案 0 :(得分:2)
您可以使用forEach:
var s = "";
GetArray().forEach(function(value, index) {
s += index+" = "+value+"\n";
});
或reduce:
var s = GetArray().reduce(function(previousValue, currentValue, index) {
return (index == 1 ? getLine(0, previousValue) : previousValue) + getLine(index, currentValue);
});
function getLine(index, value) {
return index +" = "+value+"\n";
}
答案 1 :(得分:2)
arr.forEach(callback[, thisArg])
给你:
function callback(element, index, array) {
// ...
}
但是最好的答案包括所有警告可以在这里找到:https://stackoverflow.com/a/9329476/675561
答案 2 :(得分:2)
答案是肯定的,如果您不使用任何库,例如jQuery或Underscore,您可以使用forEach:
GetArray().forEach(function(value, key) {
// blabla
});
您可以在Underscore库中找到其他替代品,如:
_.each(GetArray(), function(value, key) {
// blabla
});