Files
blog/test-category.js
meowrain 7b7e32ddd4
Some checks failed
Clean ESA Versions on Main / clean-esa-versions (push) Has been cancelled
init
2026-01-02 00:03:49 +08:00

56 lines
1.4 KiB
JavaScript

const CATEGORY_SEPARATOR = " > ";
function parseCategoryPath(categoryString) {
return categoryString
.split(CATEGORY_SEPARATOR)
.map((s) => s.trim())
.filter(Boolean);
}
function stringifyCategoryPath(path) {
return path.join(CATEGORY_SEPARATOR);
}
function getPostCategories(post) {
const category = post.data.category;
if (typeof category === "string") {
return [category];
}
return category;
}
function getPostsByCategory(posts, categoryPath) {
const targetPathString = stringifyCategoryPath(categoryPath);
console.log(`Target Path: "${targetPathString}"`);
return posts.filter((post) => {
const categories = getPostCategories(post);
return categories.some((cat) => {
const catPath = parseCategoryPath(cat);
const catPathString = stringifyCategoryPath(catPath);
console.log(` Checking Post Category: "${catPathString}"`);
const match =
catPathString === targetPathString ||
catPathString.startsWith(targetPathString + CATEGORY_SEPARATOR);
console.log(` Match: ${match}`);
return match;
});
});
}
// Mock data
const posts = [
{ data: { title: "Post 1", category: "Java" } },
{ data: { title: "Post 2", category: "Java > JVM" } },
{ data: { title: "Post 3", category: "Python" } },
];
const categoryPath = ["Java"];
const result = getPostsByCategory(posts, categoryPath);
console.log(
"Result:",
result.map((p) => p.data.title)
);