アプリ版:「スタンプのみでお礼する」機能のリリースについて

以下の方法で連想配列の初期化を行っておりますが、
初期化後に配列を画面表示すると、[object Object], [object Object]となります。

<html>
<head><title></title></head>
<body>
<script type ="text/javascript">
var list = [{id:"3", name:"aaa"},{id:"2", name:"bbb"}];
alert(list);
</script>
</body>
</html>

画面表示した際、["3","aaa"],["2","bbb"]となることを期待しております。
原因と対処方法について教えてください。

A 回答 (2件)

原因としては、JavaScript では連想配列をオブジェクトで代用しているので、


間違って大規模なオブジェクト window 等を表示しても大丈夫なように、
標準ではオブジェクトの中身を表示させない為です。

対処方法としては、以下の二点を提案します。

// 簡単な方法
alert(JSON.stringify(list)); // [{"id":"3","name":"aaa"},{"id":"2","name":"bbb"}]

// 真面目にやる方法
var converter = function(x){ var a=[]; for(var i in x) a.push('"'+x[i]+'"'); return '['+a.join(',')+']' };
alert(list.map(converter)); // ["3","aaa"],["2","bbb"]
    • good
    • 1

サンプルでは、「配列」の中に「連想配列」を設定している事になります。


連想配列の「キー:値」はオブジェクトなので、[object Object], [object Object]は当然の結果です。

求められている結果に近いものを表示するサンプルを作成してみました。
一般的に連想配列をfor文で使う場合、以下のように「for(キー in 連想配列)」といった使い方になります。
参考にしてみてください。

<script type ="text/javascript">
var list = [{id:"3", name:"aaa"},{id:"2", name:"bbb"}];
var ret = "";
for(num=0; num < list.length; num++){
ret += "[";
for(key in list[num]){
ret += list[num][key] + ",";
}
ret += "]";
}
alert(ret);
</script>
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!