Hatena::Groupjavascript

JavaScriptで遊ぶよ

 | 

2011-03-19

+ で結合

09:30

無理矢理。

$a = function() {
  var stack = $a.stack;
  $a.stack = [];
  return Array.prototype.concat.apply([], stack);
};
$a.stack = [];

Array.prototype.valueOf = function() {
  $a.stack.push(this);
  return this.toString();
};

[2,3] + [4,5], $a();
//=> [2, 3, 4, 5] 

ネストできないし $a() 呼ぶの忘れてたら狂うし、そもそも汚染だし、良いこと無し><

$a 呼ぶのを忘れないように $a([2,3] + [4,5]) と書くのもアリかな。(そういう問題ではない?)


そもそもなんで "+" で繋げたいんだろ。"," じゃダメなんだろうか。

var $a = Array.prototype.concat.bind([]);

$a(
[2,3],
[4,5]
);
//=> [2, 3, 4, 5]

↑この次に $A([1]) とやっても [2,3,4,5,1] とならないのは concat が非破壊的だから。忘れててびっくりした。


ネストできるようにしてみた

$a = function() {
  var stack = $a.stacks.pop();
  return Array.prototype.concat.apply([], stack);
};
$a.stacks = [];
$a.valueOf = function() {
  $a.stacks.push([]);
};

Array.prototype.valueOf = function() {
  $a.stacks[$a.stacks.length - 1].push(this);
  return this.toString();
};

$a + [2,3]  + ($a + [6,7] + [8,9], $a()) + [4,5], $a();
//=> [2, 3, 6, 7, 8, 9, 4, 5] 

$a で開始、,$a() で回収。キモさ10倍増し。

もちろん $a($a + [2,3] + $a($a + [6,7] + [8,9]) + [4,5]) とも書ける。

トラックバック - http://javascript.g.hatena.ne.jp/edvakf/20110319
 |