2014-09-25 2 views
0

Я новичок в Javascript, и я пытаюсь применить функцию к каждому элементу массива, а затем возвращать результат рекурсивно. Вы можете мне помочь? У меня есть цикл, чтобы подумать о элементе массива, но я не знаю, что подпись применит к ним функцию. Вот моя часть кода:Применить элементы массива к функциям javascript

function mapReduce(f, a, seed) { 
    for(i = 0; i != a.length; i++){ 

    } 
} 

где F является функцией, является массив и семян является значение, которое я должен добавить в конце (я должен суммировать выход, а затем добавить семена параметр). Надеюсь, ты поможешь мне. Извините, если этот вопрос может привести к глупому

var itemize = function(x) { 
    if(x == undefined){ 
     return undefined 
    } else { 
    var str = "<li>"; 
    var fin = "</li>"; 
    return str + x + fin; 
    } 
}; 

Испытания является:

equal(mapReduce(itemize, ["A","B","C"]), "<.li>A<./li><.li>B<./li><.li>C<./li>" , "MapReduce(itemize, ['A','B','C']) should yield '<.li>A<./li><.li>B<./li><.li>C<./li>'") 

Для карты уменьшенный я сделал что-то вроде этого:

function mapReduce(f, a, seed) { 
for(i = 0; i != a.length; i++){ 
    if(seed != undefined){ 
     if(a != undefined) { 
      seed = seed + f(a[i]); 
     } else { 
      return undefined; 
     } 
    } else { 
     var d = ""; 
     d = d + f(a[i]); 
    } 

} 
return seed; 
} 
+0

благодарит за редактирования @Bergi – pp94

ответ

1

Похоже, что вы хотите, чтобы ваши mapReduce функции эквивалентно

a.map(f).reduce(function(prev, item) { 
    return item == undefined ? prev : prev + item; 
}, seed == undefined ? "" : seed) 

Если вы хотите совместить это поведение в специальной функции, удалить промежуточный массив и сделать для цикла явно можно было бы написать

function mapCombineString(f, a, seed) { 
    if (!f || !a) return; // throw new TypeError() would be appropriate 
    if (seed == undefined) 
     seed = ""; 
    for (var i = 0; i != a.length; i++) { 
     var item = f(a[i], i, a); 
     if (item != undefined) 
      seed = seed + f(a[i]); 
    } 
    return seed; 
} 
+0

этого достаточно, чтобы сказать «удивительно»? Да, он работает отлично. Я использую глупую промежуточную матрицу. Спасибо всем Берги – pp94

Смежные вопросы