kai
(kai)
1
お世話になります。
下記コードでAPI取得した連想配列に対してログインユーザーと一致する情報を絞り込みたいのですが、「Uncaught TypeError: users.filter is not a function」と出てしまいます。
念のためコンソール結果も添付しますが一部は個人情報のため伏せます。
解決方法をご存知の方がいましたらご教授いただければ幸いです。
kintone.events.on(["app.record.create.show", "app.record.create.submit"], async function (event) {
let loginId = kintone.getLoginUser()['id'];
let numLoginId = Number(loginId);
console.log(numLoginId);
console.log(typeof (numLoginId));
{
const users = await kintone.api(kintone.api.url('/v1/users', true), 'GET', {});
console.log(users);
let test = users.filter(p => p.id == numLoginId);
console.log(test);
kaiさん、こんにちは!
あまり、そのまま答えを回答してしまうのは良くないので、
少し回りくどい説明になってしまいますが、
console.log(users);
で出力されている結果は、Object型が出力されているかと思います。
filterは、Array(配列)に対して使える関数であるため、
users.filter is not a function
と、エラーが表示されています。
もしどうしても解決できない場合は、回答させていただきますが、
あともう一歩のところまで来ていますので、
頑張ってみてください。
kai
(kai)
3
田中太郎様
ご回答ありがとうございます。
Object型が出力されていることは把握しておりました。
ですが下記URLにある連想配列でのやり方を参考にすると実現可能かと思いましたがうまく動作せずに上記にあるエラーが出ています。
回答頂いてから実装部分の解決を試みましたが進展はありませんでした。
こちら都合で大変申し訳ないのですが、本日までにエラーを解決しないといけないため、回答をご教授いただけると幸いです。
以上、よろしくお願いいたします。
まず、結論から回答させていただきますと、
let test = users.filter(p => p.id == numLoginId);
↓
let test = users.users.filter(p => p.id == numLoginId);
に修正すると、正しく動作するかと思います。
おそらく、ご返信いただいた、「連想配列」というのは、
usersオブジェクトの中のusers配列が、オブジェクト配列(連想配列)になっているということだと思いますし、そちらについては正しく実装できております。
今回、
const users = await kintone.api(kintone.api.url('/v1/users', true), 'GET', {});
で取得したレスポンスを格納する変数をusersにしてしまったため、
オブジェクトのキーと同じ名前で、紛らわしくなっていたので、
const respUsers = await kintone.api(kintone.api.url('/v1/users', true), 'GET', {});
とかにすると、もう少しわかりやすくなるかもしれません。
開発を続けていると、このエラーが出たのだったら、
ここが違っているんだろうなと、わかってくると思いますので、
頑張ってください。
kai
(kai)
5
田中太郎様
ご回答ありがとうございます。
上記内容で解決しました。
API取得したせいでアクセスする部分が違っていたのが理解できました。
今後の開発につなげられるように気を付けたいと思います。
本当にありがとうございました。
以上、よろしくお願いいたします。