2017-06-22 8 views
0

で一致した後もフィルタは何も返しません。したがって、このフィルタを自分の関数の1つで使用しようとしていますが、フィルタは空の配列を返します。Javascript

コード

filteredCardList: function() { 

    if (this.monthFilter.length > 0) { 
    return this.cardList.filter((card) => { 
     this.monthFilter.forEach(function (val) { 
     if (val.toString() == card.months) { 
      console.log('Matched') 
      return true; 
     } else { 
      console.log('NoMatch') 
      return false; 
     } 
     }); 
    }) 
    } else { 
    return this.cardList 
    } 
} 

任意のアイデア、ほとんどがmonthFilterが配列であると仮定すると、

+0

これはどこに定義されていますか?それは計算されたプロパティですか? FYI、Vue2には*フィルターがありません* – Phil

+0

また、 'monthFilter'とは何ですか?時には配列のように扱っている文字列でなければならない場合があります – Phil

+0

@Philはコードをクリーンアップさせます。私はあなたのポイントを得ました – Vikram

答えて

1

[OK]を

感謝を歓迎し、あなたはどんな種類のを使用して内部の値によってcardListをフィルタリングします一致、試してみてくださいArray.prototype.some

filteredCardList: function() { 
    if (this.monthFilter.length > 0) { 
    return this.cardList.filter(card => { 
     return this.monthFilter.some(val => { 
     return val.toString() == card.months 
     }) 
    }) 
    } else { 
    return this.cardList 
    } 
} 

return true/return falseは、forEachコールバックから戻ってきただけで、filterコールバックでは何も返されませんでした。

+0

を参照していたかどうかは分かりませんでした。私もこれを試してみました。またjavascriptのみでhttps: //jsfiddle.net/1nvfvu95/ – Vikram

+0

期待通りに動作しないので、 'monthsFilter'配列に1つの要素があるとしたら、それはうまくいきました。そして、' 12、24'で配列を更新しました。コンソールにあなたの関数の中に記録されたものと私が見ると、配列1の2つのセットと12と12,24の別のものが返されましたが、返されたcardListをチェックしたときにはまだ12ヶ月のデータしか残っていませんでした。 – Vikram

+1

@VikramでJSFiddleを更新できますか?私は私の答えでコードに問題が見ていないよ – Phil