Вопрос по – Можно ли перебирать два списка одновременно в Underscore.js?

9

Я в основном хочу выразить следующее поведение, используя_.each() или же_.map() в Underscore.js.

<code>a = [1, 2, 3]
b = [3, 2, 1]

# Result list
c = [0, 0, 0]

for i in [0 .. a.length - 1]
   c[i] = a[i] + b[i]
</code>

Это определенно возможно в Matlab (мой основной язык) как таковой:

<code>c = arrayfun(@(x,y) x+y, a, b)
</code>

Интуитивно понятно, что синтаксис в Underscore должен выглядеть следующим образом:

<code>c = _.map(a, b, function(x, y){ return x + y;})
</code>

Однако этот список аргументов неприемлем; второй параметр должен быть вызываемой функцией.

Необязательный & quot; контекст & quot; Аргумент не поможет мне в этой ситуации.

Ваш Ответ

1   ответ
16

застежка-молния (также из underscore.js) для этого. Что-то вроде этого:

var a = [1, 2, 3];
var b = [4, 5, 6];
var zipped = _.zip(a, b);
// This gives you:
// zipped = [[1, 4], [2, 5], [3, 6]]

var c = _.map(zipped, function(pair) {
  var first = pair[0];
  var second = pair[1];
  return first + second;
});

// This gives you:
// c = [5, 7, 9]

Рабочий пример:

http://jsfiddle.net/beRAD/
Я начал вопрос оString массивыhere, Кажется, что вChromium браузер.
Является ли это лучше или эффективнее, чем использование вложенных «для»? петли? Почему вы предпочитаете так или иначе?
Конечно, рад помочь!
Благодаря тонну! Это было действительно полезно. mrjoelkemp
@ icyrock.com Когда я заменяю значения в массивахa а такжеb сStrings Подчеркивание & APOS; s_.zip функция хранитlength of the array вместо значения. Вы можете это подтвердить? Как бы вы реализовали тот же сценарий, но со строками вместо целых чисел?

Похожие вопросы