目次
Vue.jsでindexOfを使っていると
Vue.jsでindexOfを使っていると割と頻繁に"TypeError: obj.indexOf is not a function"エラーに遭遇します。
大体の原因は、型が原因になっています。
indexOfは文字列にしか使えない
私がindexOfで上記のエラーに遭遇する時は、indexOfの参照元を数字にしてしまっている時です。
例えば以下の状況はエラーになります。
new Vue({
el: '#app',
data: {
selectCategory: '1',
items: [
{category:1, name:'hoge'},
{categoyr:2, name:'piyo'}
]
},
computed: {
get: function(){
var self = this;
return this.items.filter(function (item) {
return item.category.indexOf(self.selectCategory) !== -1;
});
}
}
})
選択したカテゴリー(selectCategory)でフィルターをかける時に、参照に配列(items)のオブジェクトプロパティのカテゴリー(category)を指定しています。
この時に、カテゴリーの型が数字になっているため、"TypeError: obj.indexOf is not a function"エラーが発生しています。
解決
毎回型とか気にするのが面倒ならば、つねに文字型に変換して参照すれば良いと思います。
下記はその例
String(item.category).indexOf(self.selectCategory)
上記のエラーだったスクリプトを修正すると下記になります。
new Vue({
el: '#app',
data: {
selectCategory: '1',
items: [
{category:1, name:'hoge'},
{categoyr:2, name:'piyo'}
]
},
computed: {
get: function(){
var self = this;
return this.items.filter(function (item) {
return String(item.category).indexOf(self.selectCategory) !== -1;
});
}
}
})
まとめ
割と頻繁に引っかかるので、忘れなように備忘日記でした。
当方ぺちぱーにて、型のこととか時々忘れそうになります。
今日はこの辺でー