久しぶりにjavascript(Arrayがメイン)

最初はここ*1のコードを写してみようと思ったのだけれど、3行ぐらいで飽きてしまった。
なのでMDCのリファレンス*2を見ながら適当にやってみた。

var hoge = 1;
var foo = (function() {var a=[]; for (var i=0; i<20; i++){a[i]=i}return a})();
//存在しない(objectRange

print(hoge+1);
//=>2
//すぐに飽きてしまった。mapとか使ってみたい。

//print(foo);
print(foo.map(function(arg){return arg*arg}))
//=>0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225,256,289,324,361
//0から10番目までを取り出したい。
print(foo.slice(0,10).map(function(arg){return arg*arg}))
//=>0,1,4,9,16,25,36,49,64,81
//return省略できないかなー
//どこかで省略できるという話を聞いたような気がするけど…

//配列の要素全てにたいして式が成り立つか
print(foo.every(function(arg){return arg>=0}))
//=>true
print(foo.every(function(arg){return arg>0}))
//=>false

//偶数を集める
print(foo.filter(function(arg){return arg%2==0}))
//=>0,2,4,6,8,10,12,14,16,18

//配列のどれかは式が成り立っているか調べる
print(foo.some(function(arg){return arg>=100}))
//=>false
print(foo.some(function(arg){return arg>=10}))
//=>true

//forEachの使いかたはよくわかってない。(第2引数の辺り)
//foo.forEach(function(arg){print(arg+"!")}) //出力が長すぎる
var arr = foo.filter(function(arg){return arg%5==0})
arr.reverse().forEach(function(arg){print(arg+"!")})
//=>15!
//10!
//5!
//0!
//こんな感じで良いのかな?

//文字列を配列の用に扱う
str="hogehoge"
function isLetter(chr) {return (chr >= "a" && chr <= "z")};

//昔はこうやっていた。
var chr_only = function(m){
    print( m, "version :", "This str's element are alphabet only.")
};
if (Array.prototype.every.call(str, isLetter))
    chr_only("1.5");
//=>1.5 version : This str's element are alphabet only.
//1.6からはこうできる
if (Array.every(str, isLetter))
    chr_only("1.6");
//=>1.6 version : This str's element are alphabet only.

//http://developer.mozilla.org/ja/docs/Core_JavaScript_1.5_Reference:Global_Objects:Arrayを見たら、1.6以外の情報も書いてあった。(それを使って色々改変)

print([1,3,7].concat([2,2]).join("・ω・"))
//=>1・ω・3・ω・7・ω・2・ω・2

//reduceはrubyのinjectと同じ感じかな?
print([[1,2,3],[1,2],[1]].reduce(function(a,b) {return a.concat(b)}).reduce(function(a,b){return a+b}))
//reduce is not a function 的なerrorが出た。
//spidermonkeyのバージョンが1.6でした><
//1.8に変えたら動いた。
//=>10

まだ分かってなさそうなこと

  • to*系のメソッド
  • forEach()とかの2つ目の引数の使い道。

あと、個人的な話

ubuntuは自分でパッケージをビルドするときは/opt以下にもってくるらしい(たしか。どこかで聞いたような気がする。)
なので展開するのは/opt以下に。そして自分でビルドしたものを使うようにする。

alias js='/opt/mozilla/js/src/Linux_All_DBG.OBJ/js'
alias smjs='js'

*1:その時、はてブのトップページにあった

*2:後々、見ていたのが1.6の新機能だけだったことに気づく