在JavaScript / JQuery中使迭代更具功能性

时间:2013-01-08 10:35:38

标签: javascript functional-programming

我写了一些简单的JavaScript来创建一个HTML表格 它通过遍历数组

来填充
var resultSet;
for (var i = 0, i < questions.length;; i++){ 
   ...
    resultSet += '<tr>' + '<td>' + i + '</td><td>' + questions[i].question + '</td><td>' + questions[i].userAnswer + '</td><td>' +
questions[i].correctAnswer + '</td>' + '</tr>';
}

所以这是一种必要的方法。我正在阅读Scala,其中一个类似的例子是:

questions.map(n => '<tr>' + '<td>' + '</td><td>' + questions[i].question  + ...);

哪个是功能性的。重点在于什么而不是如何。

所以我想知道如何使我的JavaScript更具功能性?

当然允许使用JQuery。

2 个答案:

答案 0 :(得分:3)

Javascript有Array.forEach但兼容性有限:虽然所有其他浏览器都支持它,但IE仅支持IE9 - 因此您可能需要其他IE的垫片。

基本上你可以写:

questions.forEach(function(a){
resultSet += '<tr><td>' + a.question + '</td><td>' + 
             a.userAnswer + '</td><td>' +
             a.correctAnswer + '</td></tr>';
});

jQuery提供.each(),它提供了相同的功能:

$.each(questions, function(index, value) {
  /* Do your stuff*/
});

答案 1 :(得分:2)

首先,正确的Scala将是

questions.map(q => '<tr>' + '<td>' + '</td><td>' + q.question  + ...);

其中qquestions的元素,而不是索引。

JavaScript也有map(有关支持此方法的浏览器,请参阅最后的浏览器兼容性)。所以它是一样的:

questions.map(function(q) { 
  return '<tr>' + '<td>' + '</td><td>' + q.question + ... 
});