Получить Specifi c JSON Объект по идентификатору из массива и вернуть объект JSON (Javascript / JQuery) - PullRequest
1 голос
/ 30 мая 2020

Я пытаюсь извлечь определенный объект c JSON из массива объектов, используя JavaScript. Вот мой JSON:

"Awards": [
   {
     "Award1": {
        "title": "Award1 Title",
        "recipient": "John Doe",
        "description": "Blah Blah Blah"
     }
   },
   {
     "Award2": {
        "title": "Award2 Title",
        "recipient": "Tom White",
        "description": "Blah Blah Blah"
     }
   },
   {
      "Award3": {
         "title": "Award3 Title",
         "recipient": "Will Biggs",
         "description": "Blah Blah Blah"
      }
   }
]

Я хочу иметь возможность создать функцию, которая принимает данные и идентификатор, находит объект в массиве и возвращает объект в целом . Например, если я ищу Award1, я хочу, чтобы он возвращал:

var obj = {
 "title": "Award1 Title",
 "recipient": "John Doe",
 "description": "Blah Blah Blah"
}

Итак, тогда я мог бы получить доступ к данным следующим образом:

obj.recipient // Which would return John Doe

Ideas?

Ответы [ 2 ]

2 голосов
/ 30 мая 2020

Находит первый объект, содержащий свойство key = Award1, и возвращает его.

const findKey = (list, key)=>(list.find(obj=>obj[key])||{})[key]

data = {
"Awards": [
   {
     "Award1": {
        "title": "Award1 Title",
        "recipient": "John Doe",
        "description": "Blah Blah Blah"
     }
   },
   {
     "Award2": {
        "title": "Award2 Title",
        "recipient": "Tom White",
        "description": "Blah Blah Blah"
     }
   },
   {
      "Award3": {
         "title": "Award3 Title",
         "recipient": "Will Biggs",
         "description": "Blah Blah Blah"
      }
   }
]
}

console.log(data.Awards.find(obj=>obj["Award1"]))

let key = "Award1"
console.log(data.Awards.find(obj=>obj[key])[key].title)

console.log(
findKey(data.Awards,'Award1')
)

console.log(
findKey(data.Awards,'Award2')
)

console.log(
findKey(data.Awards,'Award3')
)
1 голос
/ 30 мая 2020

Это должно сработать:

var obj=Awards['Award1'];

Но имейте в виду, что это будет только ссылочная копия, т.е. изменения в obj также произойдут с исходным объектом Awards.

На самом деле нет необходимости создавать для него функцию, но, конечно, вы тоже можете это сделать:

function getObj(parent,key){
  return parent[key];
}

var obj=getObj (Awards,'Award1');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...