Posts Tagged ‘Array’

このページの目次

Javascriptって2次元の連想配列できないの?

金曜日, 11月 6th, 2009

こんにちは、なかわけです。

今日仕事中にJavascriptにハメられたことをメモ。
メモしておけば同じ過ちをしないと思ったので。

2次元の連想配列が作りたくで以下のように書きました。

//TypeA
TypeA = {};
TypeA['hoge']['fuga'] = 'piyo';
alert(TypeA['hoge']['fuga']);

こうすると、alertはでないし、なかわけの環境ではスクリプトエラーも出ませんでした。
おかしいなあと思って、その時はとりあえず1次元の連想配列でやり過ごしました。

お家帰って思いつきました。
TypeA = {};
はObjectであっても、
TypeA['hoge']
はObjectではないのでfugaプロパティが追加できない(配列的に扱えない)!

てことで、以下

//TypeB
TypeB = {};
TypeB['hoge'] = {fuga : 'piyo'};
alert(TypeB['hoge']['fuga']);

のように書くか、もしくは

//typeC
TypeC = {};
TypeC['hoge'] = {};
TypeC['hoge']['fuga'] = 'piyo'
alert(TypeC['hoge']['fuga']);

のように書く必要があったのですね。
あーしょうもないことに時間費やした・・・。
でも、ここにメモしたので一生忘れない!

Array.lengthの値が期待と違って困ってる

土曜日, 9月 19th, 2009

こんにちは、なかわけです。

Array.lengthの件でちょっと困ってます。

var arr:Array = new Array();
for (var i:uint = 10000; i >= 1; i /= 10) {
	arr[i] = 1 + Math.floor(num / i);
	num = num % i;
}
trace(arr);

このとき、traceされた値が5であってほしいのに、10001が帰ってくる。
困る/(^o^)\
いや、困ってないけどなんか気持ち悪いです。

AS3で配列の中の重複を取り除いてユニークな配列にする処理

金曜日, 9月 11th, 2009

こんにちは、なかわけです。

AS3に配列内をユニークにして返してくれる処理がなかったので、いろいろ調べながら作った。
使い方によってはユニーク化にもグループ化にもできる。


var nekoArr:Array = [
{color:'white', sex:'male', age:'1'},
{color:'black', sex:'female', age:'3'},
{color:'kiji', sex:'male', age:'2'},
{color:'white', sex:'male', age:'5'},
{color:'black', sex:'female', age:'4'}
];

function uniqueNeko(arr:Array):Array
{
var tmpObj:Object = new Object();
var uniqueArr:Array = new Array();
for (var i:uint = 0; i < arr.length; i++) { var property:String = arr[i]['color'] + arr[i]['sex']; if (!(property in tmpObj)) { tmpObj[property] = true; uniqueArr.push(arr[i]); } } return uniqueArr; } uniqueNeko(nekoArr); [/as3] 色とオスメスでグループ化したいとき(年齢は無視)、colorとsexの値を結合して文字列にしtmpObjのプロパティにするところがミソ。 tmpObj[property]にtrueを入れているけど、trueである必要はなく空文字でもなんでもいいです。プロパティを追加することに意味があるので。 たぶん、これでOKじゃないかなー。おかしかったらコメントください。

AS3.0で連想配列を作ろうとしたら

土曜日, 1月 31st, 2009

こんにちは、なかわけです。

ついこの間Flashを編集していて配列を作ろうと思ったらできませんでした。

var myArray:Array = new Array();
myArray['hoge'] = "こんにちは";
myArray['fuga'] = "こんばんは";

できない・・・。

Flashのヘルプを検索しても「連想配列」について1件もヒットしませんでした。

もしかして、連想配列使えなくなった!?
いや待て。そんなわけない!

Googleで検索したところすぐ見つかりました。

AS3.0で連想配列を作るときは、ArrayクラスのオブジェクトではなくObjectクラスのオブジェクトと使うようです。
配列なのに! 

くそぅ、一時間無駄にしました・・・