フォームでテーブルを作成してそれを一覧でカスタムビューすること
を検討しております。
そこで、テーブルは
A|B|C
100|200|300
200|300|400
300|400|500
と三つのセルに分かれており、カスタムビューで表示させるために、この個数をJSで取得したいのです。
e.records[0].Table1.value[0]は
value{
{cell1:{A:100,B:200,C,300},cell2:{A:200,B:300,C,400},cell3:{A:300,B:400,C,500}}
}
といったようになっておりますが、
e.records[0].Table1.value[0].value.length
ではundefinedになってしまい、その個数(ABCで3つ)を取得することができません。連想配列の個数の取得としてJS上の問題かもしれませんが、この個数を取得するにはどのようにすればよろしいのでしょうか。
宜しくお願い申し上げます。
jQuery.noConflict();
(function($) {
"use strict";
kintone.events.on("app.record.index.show", function(e) {
if(e.viewId!==5520316){
return
}
console.log(e.records[0].Table1.value[0].value.length);
});
})(jQuery);
e.records[0].Table1の結果です↓また実際はcellではなくstringとなっています。
列の数を数えたいってことですよね?
Object.keys(e.records[0].Table1.value[0].value).length
でどうですか?
オブジェクトを一度配列に変換してやればlength使えます。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
ちなみに書式設定で「コード」を選ぶと
ソースコードが見やすいコードブロック表示になるので、
これも活用してみてくださいね。
コメント有難うございます。他のサーバーサイド言語ではオブジェクトであれ連想配列であれ
配列には変わりないので単純にlengthやcount等で個数を取得できたのですがJSの場合にはオブジェクトから
直接その要素の個数をlengthプロパティで取得できないのですね。
またコードの記載の仕方も初めてしりました。早速編集して更新させていただきました。はるかに見やすいですね。
改めて御礼申し上げます。
宜しくお願いいたします。
オブジェクトでも普通にlength使えたら便利なんですけどね。
JSは「プロトタイプベース」という、少々変わった仕組みでオブジェクト指向を実現してるので、
その辺の言語仕様が関係していそうです。
https://www.slideshare.net/yuka2py/javascript-23768378
配列と連想配列の関係を色々な言語で比較したこ記事、面白いですよ。
「JavaScriptのArrayは配列ではなく配列のふりをした連想配列だからです。」
ってのが一番のポイントですね。
http://blog.livedoor.jp/dankogai/archives/51858766.html
(マニアックですいませんw)
ありがとうございます!
JSのオブジェクト指向を学ぶ時に、プロトタイプチェーンはさらっと学んだのですが、
ちょっとこの機会に深層を学んでみようと思います。
また、普段はPHPerなので、rubyやpythonとの比較を見てへ~と思わず読み込んでしまいました。
やはりそれぞれ振る舞いや癖が違いますね。
まだまだ勉強不足を実感いたしました、精進いたします♪
深謝を申し上げる次第です。