Массив ключей, найти значения в json объекте - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть массив, в котором есть ключи, мне нужно найти внутри json массив объектов.

мой массив:

arr= ['abc', 'xyz', 'pqr']

формат данных d.data:

[{'abc': 123, 'xyz': 321, 'pqr': 345}, {'abc': 111, 'xyz': 222, 'pqr': 333}.....]

У меня есть json объект.

arr - список ключей, и мне нужно найти их значения в массиве json объектов.

У меня огромный массив (arr), поэтому я не хочу его жестко кодировать.

Я пытался сделать:

arr.forEach(x => {
   let valss = d.data.map(structure => Object.values(structure.x));
});

Я получить Uncaught (in promise) TypeError: Cannot convert undefined or null to object.

Как я могу значения для ключей внутри моего массива?

Ответы [ 4 ]

1 голос
/ 10 апреля 2020

try

for(var j = 0; d.data.length; j++){
  for(var i = 0; i < arr.length; i++){
    let valss = d.data[j][arr[i]]
  }
}

При условии образца данных все, что вам нужно сделать, это l oop через каждый объект в словаре, затем l oop через ваши ключи, чтобы получить ключи в словаре , Даю вам ожидаемые значения.

0 голосов
/ 10 апреля 2020

вы можете попробовать что-то вроде этого:

var arr= ['abc', 'xyz', 'pqr']
var data = [{'abc': 123, 'xyz': 321, 'pqr': 345}, {'abc': 111, 'xyz': 222, 'pqr': 333}]
var values = arr.map( key => {
  let vals = data.map( val => {
   	return val[key]
   })
  return vals
})
console.log(values)
0 голосов
/ 10 апреля 2020

Если вы хотите получить значения объектов в массиве data, вы можете просто отобразить его и вернуть только значения. Как это: data.map((o) => Object.values(o));

let arr = ["abc", "xyz", "pqr"];

let data = [
  { abc: 123, xyz: 321, pqr: 345 },
  { abc: 111, xyz: 222, pqr: 333 },
];

let values = data.map((o) => Object.values(o));

console.log(values) // [ [ 123, 321, 345 ], [ 111, 222, 333 ] ]
0 голосов
/ 10 апреля 2020

Вы можете сделать что-то вроде ниже:

Все значения в одном массиве результатов:

var arr = ['abc', 'xyz', 'pqr'];
var data = [{'abc': 123, 'xyz': 321, 'pqr': 345}, {'abc': 111, 'xyz': 222, 'pqr': 333}];
var result = [];

for(let item of data) {
  arr.forEach(function(el, i) {
    if(item.hasOwnProperty(el)) {
      result.push(item[el]);
    }
  });
}

console.log(result);

Или отдельные вложенные массивы для каждого объекта в массиве данных:

var arr = ['abc', 'xyz', 'pqr'];
var data = [{'abc': 123, 'xyz': 321, 'pqr': 345}, {'abc': 111, 'xyz': 222, 'pqr': 333}];
var result = [];

for(let item of data) {
  var temp = [];
  arr.forEach(function(el, i) {
    if(item.hasOwnProperty(el)) {
      temp.push(item[el]);
    }
  });
  
  if(temp.length > 0) {
    result.push(temp);
  }
}

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