ich fünf Artikel mit diesen ursprünglichen Eigenschaften haben:Der Versuch, eine Trending Formel basierend auf bestimmten Bedingungen zu schaffen
const articles = [
{ id: 1, views: 92, likes: 0, shares: 2, trendingValue: ? },
{ id: 2, views: 14, likes: 2, shares: 1, trendingValue: ? },
{ id: 3, views: 39, likes: 3, shares: 1, trendingValue: ? },
{ id: 4, views: 87, likes: 0, shares: 1, trendingValue: ? },
{ id: 5, views: 8, likes: 1, shares: 0, trendingValue: ? }
];
ich auch eine globale Statistiken haben Objekt, das automatisch, sobald ein Artikel wird neue Ansichten aktualisiert werden, mag oder Aktien (oder einmal pro Woche):
const stats = {
totalArticles: 5,
totalViews: 240,
totalLikes: 6,
totalShares: 5,
trendingCriteria: 0
};
Bisher glaube ich es irgendeine Art von Formel, die trendingCriteria
trendingValue
und Statistik mit Artikeln getan werden kann. Grundsätzlich müssen die Artikel, die "Trending" sind, eine gleiche oder höhere Anzahl als die Kriterien haben. Das bedeutet, dass jedes Mal, wenn ein Artikel eine neue Ansicht, Freigabe oder Ähnliches erhält, trendingValue
in Bezug auf seinen Prozentsatz der Aufrufe, Likes und Freigaben durch die Gegenstücke der globalen Statistiken aktualisiert werden muss.
Ein Beispiel (die nicht genau funktioniert) ist:
- ein Nutzer Artikel 1.
Diese Formel für den Artikel verläuft seine erstellen
trendingValue
:const article = articles[0]; // Article with id 1 article.views++; // Increment the views count stats.totalViews++ // Increment the total views count let percentSum = ( (article.views/stats.totalViews) + // = 0.3833 (article.likes/stats.totalLikes) + // = 0 (article.shares/stats.totalShares) // = 0.4 ); // = 0.7833 // The trendingValue needs to be a higher value of trendingCriteria // before refreshing trendingCriteria. article.trendingValue = (stats.trendingCriteria + (percentSum/stats.trendingCriteria) );
- Als nächstes sollte
trendingCriteria
in Bezug auf den aktualisierten Artikel aktualisiert werden. Die zugrunde liegende Logik ist; Wenn der neuetrendingCriteria
höher ist als der ArtikeltrendingValue
, sollte der Artikel nicht mehr "Trending" sein.
Der dritte Schritt ist, wo ich feststecke. Wie erstelle ich diesen Wert? Kann dieser Wert für jede einzelne neue Ansicht aktualisiert und geteilt werden? Oder muss ich den Wert einmal pro Woche aktualisieren?
Aktualisieren
Vielen Dank für alle Antworten. Leider konnte ich sie nicht nutzen, da ich noch nicht weiß, was ich mit den vorgeschlagenen Lösungen anfangen soll.
Jedenfalls habe ich eine andere Lösung ausprobiert, die einen epochalen Zeitstempel und die durchschnittlichen Ansichten, Likes und Shares verwendet. Ich bin mir nicht sicher, ob es in der Praxis funktioniert. Wenn jemand bestätigen kann, dass ich dankbar bin.
function refreshArticleAtIndex(index, props) {
const data = articles[index];
\t
// Increment props
if(props.view) { data.views++; stats.views++; }
else if(props.like) { data.likes++; stats.likes++; }
else if(props.share) { data.shares++; stats.shares++; }
// Refresh trendingRate
data.trendingRate = (() => {
\t const calcViews = data.views/stats.views;
\t const calcLikes = data.likes/stats.likes;
\t const calcShares = data.shares/stats.shares;
\t let value = Date.now() * (
(isFinite(calcViews) ? calcViews : 0) +
(isFinite(calcLikes) ? calcLikes : 0) +
(isFinite(calcShares) ? calcShares : 0)
);
\t return Math.round(value);
})();
}
function logArticles() {
const arr = articles.map(article => article);
arr.sort((a, b) => a.trendingRate > b.trendingRate ? -1 : 1);
arr.forEach(a => console.log(a.id +" |", a.trendingRate));
console.log("----------");
}
const stats = { views: 239, likes: 6, shares: 5 };
const articles = [
{ id: 1, views: 91, likes: 0, shares: 2, trendingRate: 0 },
{ id: 2, views: 14, likes: 2, shares: 1, trendingRate: 0 },
{ id: 3, views: 39, likes: 3, shares: 1, trendingRate: 0 },
{ id: 4, views: 87, likes: 0, shares: 1, trendingRate: 0 },
{ id: 5, views: 8, likes: 1, shares: 0, trendingRate: 0 }
];
console.log("ID | trendingRate");
// ================================================
// Add 1 view to article 1
refreshArticleAtIndex(0, { view: true });
// Add nothing to below articles, but refresh their trendingRate
refreshArticleAtIndex(1, {});
refreshArticleAtIndex(2, {});
refreshArticleAtIndex(3, {});
refreshArticleAtIndex(4, {});
logArticles();
// Add 1 like to article 1
refreshArticleAtIndex(0, { like: true });
logArticles();
Das erste Protokoll der richtigen Reihenfolge auf einer Kombination aus Ansichten basiert zeigen, Vorlieben und Aktien für jeden Artikel. Als nächstes bekommt Artikel 1 ein Like, was ihn zum Trendartikel macht.
Frage ist, ob das eine funktionierende Lösung ist?
Wie beurteilen Sie 'trendingValue' mit Null? –
'trendingValue', der gleich 0 ist, sind neue Artikel, die keine Ansichten, Likes und Shares haben. Da ich jedoch nach einer funktionierenden Formel für diesen Wert frage, setze ich sie hier im Beispiel auf 0. Es bedeutet also nichts in diesem Fall. EDIT: Ich habe sie jetzt in Fragezeichen geändert. –
percentSum sollte ein geometrisch sein statt einfach Gesamt oder Durchschnitt :) –