JS Snippets: Array of Objects: Difference between revisions
From WikiMLT
Line 148: | Line 148: | ||
== Get unique Tags from Podcast-data == | == Get unique Tags from Podcast-data == | ||
<syntaxhighlight lang="typescript | <syntaxhighlight lang="typescript"> | ||
import products from "./podcast-data.mjs"; | import products from "./podcast-data.mjs"; | ||
Revision as of 14:59, 11 March 2023
References
- Scrimba: JavaScript Interview Challenges
- MLT GitHub: JavaScript Homework Tasks
Example data files
product-data.mjs
export default [
{ product: "#1", type: "sweet", price: 7.54 },
{ product: "#2", type: "savory", price: 2.55 },
{ product: "#3", type: "savory", price: 3.79 }
];
podcast-data.mjs
export default [
{
id: 1,
title: "Stranger Scrims",
duration: 40,
tags: ["supernatural", "horror", "drama"],
},
{
id: 2,
title: "The Scrim of the Dragon",
duration: 60,
tags: ["drama", "fantasy"],
},
{
id: 3,
title: "Scrim Hunters",
duration: 22,
tags: ["reality", "home improvement"],
}
];
airlines-podcast-data.mjs
export default [
{
id: 1,
title: "Scrimba Podcast",
duration: 50,
tags: ["education", "jobs", "technology"],
hosts: ["Alex Booker"],
rating: 10,
genre: "education",
paid: false
},
{
id: 2,
title: "Crime Fan",
duration: 150,
tags: ["crime", "entertainment", "mature"],
hosts: ["Bob Smith", "Camilla Lambert"],
genre: "true crime",
rating: 5,
paid: true
},
{
id: 3,
title: "Mythical Creatures",
duration: 99,
tags: ["entertainment", "general", "unicorns"],
hosts: ["Esmerelda Shelley", "Duke Dukington", "Felix the Cat"],
genre: "fantasy",
rating: 8,
paid: true
},
{
title: "Crime Crime Crime",
duration: 70,
tags: ["crime", "entertainment", "mature"],
hosts: ["Jessica Jones", "Humphrey Bogart", "Inspector Gadget"],
genre: "true crime",
rating: 6,
paid: true
},
{
title: "Something about Witches",
duration: 35,
tags: ["fantasy", "entertainment"],
hosts: ["Frewin Wyrm", "Evanora Highmore"],
genre: "fantasy",
rating: 8,
paid: false
},
{
title: "Coding Corner",
duration: 55,
tags: ["education", "jobs", "technology"],
hosts: ["Treasure Porth", "Guil Hernandez", "Tom Chant"],
genre: "education",
rating: 9,
paid: false
},
];
Sort Objects by a Property (Price)
import products from "./product-data.mjs";
function sortProducts(data: { product: string, type: string, price: number }[]) {
return data.sort((a, b) => a.price - b.price);
}
Reduce the prices into a Sum
import products from "./product-data.mjs";
function sumPrices(data: { product: string, type: string, price: number }[]) {
return parseFloat(
data.reduce((acc, { price }) => acc + price, 0)
).toFixed(2);
}
Reduce the prices of certain product type into a Sum
import products from "./product-data.mjs";
function sumPrices(data: { product: string, type: string, price: number }[]) {
return parseFloat(
data
.filter(({ type }) => type === "savory")
.reduce((acc, { price }) => acc + price, 0)
).toFixed(2);
}
Filter the Objects by a Property and Map a new Array
import products from "./product-data.mjs";
function sumPrices(data: { product: string, type: string, price: number }[]) {
return data
.filter(({ type }) => type === "savory")
.map(({ item, price }) => ({ item, price }));
}
Get unique Tags from Podcast-data
import products from "./podcast-data.mjs";
function getUniqueTagsForInLoop(data) {
const unqTagsTrack = {};
const unqTagsList = [];
data
.map(({ tags }) => tags)
.flat().forEach(tag => {
unqTagsTrack[tag] = true;
});
for (const key in unqTagsTrack) {
unqTagsList.push(key);
}
return unqTagsList;
}
import products from "./podcast-data.mjs";
function getUniqueTagsWithFilter(data) {
const unqTagsTrack = {};
return data
.map(({ tags }) => tags)
.flat()
.filter(tag => {
if (!unqTagsTrack[tag]) {
unqTagsTrack[tag] = true;
return true;
}
return false;
});
}