отфильтровать объект json на javascript

113
13 января 2021, 12:30

Объект: names-array.json

[
  {
    "item_1": [
       {
         "value": 2
       },
       {
         "value": 4
       }
    ]
  },
  {
    "item_2": [
       {
         "value": 5
       },
       {
         "value": 6
       }
    ]
  }
]

Нужно вытащить:

[
   {
     "value": 5
   },
   {
     "value": 6
   }
]

Попытка решения (node.js)

const namesArray = require('./names-array.json');
function findAvailable(name) {
  return namesArray.filter(item => {
    return item.hasOwnProperty(name);
  });
}

Да, filter создал опять массив и его можно убрать добавив [0], но останется item_2, и это какое-то корявое решение.

console.log(findAvailable('item_2')[0])

Результат:

{ 
  item_2: [ 
    { 
      value: 5
    }, 
    { 
      value: 6
    } 
  ]
}

Как получить желаемое?

Answer 1

Не совсем понятно, по какому правилу надо фильтровать, но давайте условимся: у нас есть ключ и нам нужно получить, все значение объекта, у которого есть этот ключ

const data = [ 
  { 
    "item_1": [ 
       { 
         "value": 2 
       }, 
       { 
         "value": 4 
       } 
    ] 
  }, 
  { 
    "item_2": [ 
       { 
         "value": 5 
       }, 
       { 
         "value": 6 
       } 
    ] 
  } 
]; 
 
 
const getFilteredData = (key, data) => { 
  const result = data.find(e => e.hasOwnProperty(key)); 
   
  if (!result) return undefined; 
   
  return result[key]; 
} 
console.log(getFilteredData('item_1', data)); 
console.log(getFilteredData('item_2', data)); 
console.log(getFilteredData('never', data));

Немного про метод find

Метод find() возвращает значение первого найденного в массиве элемента, которое удовлетворяет условию переданному в callback функции. В противном случае возвращается undefined.

Note

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

READ ALSO
Получить value из элемента листа JS [закрыт]

Получить value из элемента листа JS [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

102
Найти,из введенных строк, строку с максимальной и минимальной длинной

Найти,из введенных строк, строку с максимальной и минимальной длинной

Здравствуйте есть вот такое задание: Пользователь вводит последовательность строк, состоящих из слов и чисел, разделенных пробеламиПризнак...

114
Как сделать первую букву каждого слова заглавной? (регулярные выражения JS)

Как сделать первую букву каждого слова заглавной? (регулярные выражения JS)

У меня есть код, который исправляет первую букву каждого слова в инпуте на заглавную букву, очень полезно для инпутов именТак вот данный код...

134