たたみすぎる Array#flattenはprototype.jsでも。

さくっと深さ優先探索したいときに map でこう書く。
aϵ[0,1,2]とbϵ[1,2,4]からa+bが奇数になるペアを求める。

function solve() {
  var a = [0,1,2];
  var b = [1,2,4];
  return a.map(function(x) {
    return b.map(function(y) {
      if ((x + y) % 2)
	return [x,y];
      else
	return [];
    })}).flatten();
}

返してほしかったのは

[[0, 1], [1, 2], [1, 4], [2, 1]]

だが、flatten()につぶされて、

[0, 1, 1, 2, 1, 4, 2, 1]

に。つぶしてほしかったのはツリー構造だけで、[x,y]は残しておいてほしかった。
appendを使って、一段づつ慎重につぶすようにしよう。

Array.prototype.append = function() {
  return [].concat.apply([],this);
}

function solve() {
  var a = [0,1,2];
  var b = [1,2,4];
  return a.map(function(x) {
    return b.map(function(y) {
      if ((x + y) % 2)
	return [[x,y]];
      else
	return [];
    }).append()}).append();
}

これでOK.