needClear() {
return (Object.values(this.form).filter(elem => elem).length > 0)
}
コメントを頂いたので some
パターンを追記。すっきり〜
needClear() {
return (Object.values(this.form).some(elem => elem))
}
ユースケースは、Vue.jsなどで
<input v-model="form.name">
<input v-model="form.email">
<select v-model="form.lang">
<checkbox v-model="form.loveMe">
のような簡単なフォームをつくったとき、どれかに値が入っていたらクリアボタンを表示したい。みたいな時。
(以下はVueの場合のバインディングの仕方)
<button v-show="needClear">clear</button>
としてる。
JavaScriptの真偽判定では、 0
false
もfalseとなってしまうが、↑のユースケースなら <input type="number">
でも文字列が入ってくるし、checkboxでもfalseならクリアする必要がないことがほとんどなのでとりあえず問題はない。
もし 0
や false
にも対応したい場合は
needClear() {
return (Object.values(this.form).filter(elem =>{
(elem === false || elem === 0 || elem) return elem
}).length > 0)
}
とかなら対応可能。
けど、走査しちゃうしこんなのでいいのかな。同じ前提条件でももっといい感じの方法がありそう。
(そもそも form.name
みたいに入れ子にするなよ、というのはごもっとも)