JSON Object Search
by sbhomra
JavaScript
function searchObjects(objects, keywords) {
const searchTerms = keywords.toLowerCase().split(' ');
const filteredObjects = objects.filter(obj => {
return searchTerms.some(term => {
return Object.values(obj).some(value => {
return value.toString().toLowerCase().includes(term);
});
});
});
const scoredObjects = filteredObjects.map(obj => {
let score = 0;
Object.values(obj).forEach(value => {
searchTerms.forEach(term => {
if (value.toString().toLowerCase().includes(term)) {
score++;
}
});
});
return { obj, score, date: obj.date }; // Assuming 'date' is a property in your objects
});
return scoredObjects
.sort((a, b) => {
if (a.score !== b.score) {
return b.score - a.score;
} else {
return b.date - a.date; // Sort by date in descending order
}
})
.map(item => item.obj);
}
const objects = [
{ name: 'Alice Alice New York', age: 30, city: 'New York', date: new Date(2023, 11, 25) },
{ name: 'Alice from LA', age: 25, city: 'Los Angeles', date: new Date(2024, 10, 1) },
{ name: 'Char in Chicago', age: 35, city: 'Chicago', date: new Date(2023, 9, 15) }
];
const keywords = 'Alice';
const filteredObjects = searchObjects(objects, keywords);
console.log(filteredObjects);