質問: (parents.indexOf(my_post_num)).length;//カウントされない? if (parents.indexOf(my_post_num) >= 0){ $(this).append('ボタン'); $(this).find('.count-box').text(my_child_count); } }); ``` 夜分に長いコードを提示して大変恐縮ではございますが、どうぞ宜しくお願い致します。
回答: > > これは配列parentsからmy_post_numと一致する数をlengthでカウントしているつもりですが、なぜかundifindになってしまいます。 > > > indexOf の理解が誤っているのでは。 `indexOf`の戻り値は、例えば`const array = [5, 3, 6, 7, 1, 6, 1]`のような配列があったとき、 `array.indexOf(1)`の戻り値は`4`です。 `array.indexOf(2)`の戻り値は`-1`です。 そして`length`は`String`または`Array`のプロパティです。 `Number`に`length`プロパティはありません。 `var my_child_count = (parents.indexOf(my_post_num)).length;` ここでやりたいのはおそらく `var my_child_count = parents.filter(num => num === my_post_num + '').length;` こういうことですよね。 これは`parents`という配列から`my_post_num`に一致する要素のみ抽出して新しい配列を作り、その長さを取得しています。 `parents`配列には文字列で数字が入っていたので、`my_post_num`は文字列に変換して比較しています。 厳密な比較が必要ないなら`=== my_post_num + ''`のところを`=`2個にして、`== my_post_num`にしても良いです。 で、直後の`if`文も条件式が誤っているので修正すればやりたいことができると思います。