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);