обращение к json по имени поля

есть такой json объект :

[
    {
      "id": 0,
      "title": "Название 1"
    },
    {
      "id": 1,
      "title": "Название 2"
    }
  ]

сейчас обращение происходит так : импортирую файл

import Items from '/items.json';

и дальше получаю первый элемент так:

Items[0].title

есть какой то способ в js обращаться по имени поля чтобы писать не Items[0] , а Items['Название 1']


Ответы (1 шт):

Автор решения: EzioMercer
  • Можно так например: items.find(el => el.title === 'Название 1')

    const items = [{
        "id": 0,
        "title": "Название 1"
      },
      {
        "id": 1,
        "title": "Название 2"
      }
    ]
    
    const getItemByName = (arr, name) => arr.find(el => el.title === name);
    
    console.log(getItemByName(items, 'Название 1'));
    console.log(getItemByName(items, 'Название 2'));
    console.log(getItemByName(items, 'Название 3'));

  • Если не хотите вызывать функцию вручную каждый раз, то можно с помощью Proxy так:

    const items = [{
        "id": 0,
        "title": "Название 1"
      },
      {
        "id": 1,
        "title": "Название 2"
      }
    ]
    
    const itemsByName = new Proxy(items, {
      get(target, prop) {
        return target.find(el => el.title === prop);
      }
    });
    
    console.log(itemsByName['Название 1']);
    console.log(itemsByName['Название 2']);
    console.log(itemsByName['Название 3']);

  • Чтобы не терять время на поиски каждый раз, можно заранее подготовить нужную структуру

    const items = [{
        "id": 0,
        "title": "Название 1"
      },
      {
        "id": 1,
        "title": "Название 2"
      }
    ]
    
    const itemsByName = {};
    
    for (const item of items) itemsByName[item.title] = item;
    
    console.log(itemsByName['Название 1']);
    console.log(itemsByName['Название 2']);
    console.log(itemsByName['Название 3']);

→ Ссылка