Возврат объекта с определенным ключом: пара значений в массиве, вложенном в другой массив - Javascript - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь вернуть объект из кода ниже, который имеет пару ключ-значение name: sparky, и вернуть весь массив метаданных и статистики для этого объекта.

Я не хочу использовать Object.values ​​(objectArray) [0], поскольку эти данные поступают из API, и я ожидаю, что в будущем положение объектов в массиве изменится.

Я пробовал objectArray.find, но не знаюкак использовать это, чтобы найти значение массива, который находится внутри другого массива.Значение для имени всегда будет уникальным, и фактический objectArray содержит в себе гораздо больше объектов.

Помощь будет принята с благодарностью!

Код

objectArray = [
  {
    "metadata": [
      {
        "key": '1',
        "name": "sparky"
      }
    ],
    "stats": [
      {
        "statsFieldOne": "wins"
      },
      {
        "statsFieldTwo": "kills"
      }
    ]
  },
  {
    "metadata": [
      {
        "key": '1',
        "name": "abby"
      }
    ],
    "stats": [
      {
        "statsFieldOne": "wins"
      },
      {
        "statsFieldTwo": "kills"
      }
    ]
  }
]

Желаемый результат

     {
       "metadata": [
          {
            "key": '1',
            "name": "sparky"
          }
        ],
        "stats": [
          {
            "statsFieldOne": "wins"
          },
          {
            "statsFieldTwo": "kills"
          }
        ]
      }

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Вы можете просто использовать Уменьшить

let objectArray = [{"metadata":[{"key":'1',"name":"sparky"}],"stats":[{"statsFieldOne":"wins"},{"statsFieldTwo":"kills"}]},{"metadata":[{"key":'1',"name":"abby"}],"stats":[{"statsFieldOne":"wins"},{"statsFieldTwo":"kills"}]}]

let op = objectArray.reduce(( op,{metadata,stats} ) =>{
  let found = metadata.find(({name})=>name==='sparky')
  if(found){
    op.push({metadata:found,stats})
  } 
  return op
},[])

console.log(op)
0 голосов
/ 23 февраля 2019

Полагаю, вы можете сделать следующее:

function getObjectForName(key, name) {
    var filteredMetadata = [];
    for(var i=0; i< objectArray.length; i++) {
        filteredMetadata = objectArray[i].metadata.filter((val) => val[key] === name)
        if(filteredMetadata.length) {
            return objectArray[i];
        }   
    }
}
getObjectForName('name', 'sparky')

В основном этот код выполняет итерацию по всем объектам и проверяет, является ли имя искрящимся, если да, просто сломайте его.Если вы хотите вернуть все вхождения, соответствующие имени, вам нужно добавить их все в другой массив и вернуть его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...