- Для фильтрации массива используйте Array.prototype.filter ()
- Создайте шаблонную функцию для одного твита, которая возвращает желаемую HTML разметку
- Не использовать дублированные идентификаторы, вместо них используйте классы
- При нажатии получите значение
data-user
и отфильтруйте массив объектов по user
свойству
const tweets = [
{created_at: "2020-03-14T08:15:30Z", user:"aaa", message:"Lorem aaa ipsum"},
{created_at: "2020-03-15T08:16:21Z", user:"bbb", message:"Lorem bbb ipsum"},
{created_at: "2020-03-16T08:17:45Z", user:"aaa", message:"Lorem aaa ipsum"},
{created_at: "2020-03-16T08:19:10Z", user:"ccc", message:"Lorem ccc ipsum"},
];
const template_tweet = tweet => $("<div>", {
class: "tweet",
html: `
<span class="tweet-time">${new Date(tweet.created_at).toLocaleString()}</span>
<a class="tweet-user" data-user="${tweet.user}">@${tweet.user}</a>
<div class="tweet-message">${tweet.message}</div>
`,
});
const showTweets = (tweets, user) => {
const tweetsFiltered = user ? tweets.filter(tweet => tweet.user === user) : tweets;
$("#tweets").html(tweetsFiltered.map(template_tweet));
}
showTweets(tweets); // Show all unfiltered
$("#tweets").on('click', '[data-user]', function() {
showTweets(tweets, this.dataset.user); // Show by user name
});
.tweet {padding: 10px;}
.tweet-user {color:#08e; cursor:pointer;}
<div id="tweets"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>