如何评估for循环中的隐式(未命名)变量?

时间:2014-10-14 11:01:53

标签: javascript for-loop implicit evaluate

以下在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中是否存在等价物?

3 个答案:

答案 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
});