Ссылка на заголовок объекта в массиве объектов - PullRequest
3 голосов
/ 16 мая 2019

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

 let json = {
    "6250": {
        "property1": "...",
        "property2": "..."
    },
    "6177": {
        "property1": "...",
        "property2": "..."
    },
    "5870": {
        "property1": "...",
        "property2": "..."
    },
    "4297": {
        "property1": "...",
        "property2": "..."
    },
    "5743": {
        "property1": "...",
        "property2": "..."
    }
}

function json2array(json){
    var result = [];
    var keys = Object.keys(json);
    keys.forEach(function(key){
    result.push(json[key]);
});
    return result;
}

var array = json2array(json);

array.forEach(function(elem, i) {
    Output.push(name, elem["property1"], elem["property2"]]);
});

Например, "name" должно быть 6250 в первом цикле.

Ответы [ 3 ]

0 голосов
/ 16 мая 2019

Object.entries () , кажется, обладает всеми необходимыми вам функциями.Он вернет массив [ключ, значение] для каждого свойства входного объекта.Это означает, что на выходе будет двухмерный массив.

let array2d = Object.entries(json);
array2d.forEach(function (elem) {
    Output.push(elem[0], elem[1].property1, elem[1].property2);
});
0 голосов
/ 16 мая 2019

Надеюсь, я правильно понимаю вашу проблему.Чтобы получить все значения в массиве single , вы можете использовать Array.reduce для Object.keys примерно так:

let json = { "6250": { "property1": "...", "property2": "..." }, "6177": { "property1": "...", "property2": "..." }, "5870": { "property1": "...", "property2": "..." }, "4297": { "property1": "...", "property2": "..." }, "5743": { "property1": "...", "property2": "..." } }

let result = Object.keys(json).reduce((r,c) => {
  r.push(c, ...Object.values(json[c]))
  return r
}, [])

console.log(result)
0 голосов
/ 16 мая 2019

Это лучший и самый чистый способ итерации json, надеюсь, это поможет.

let dataJson =  {
"6250": {
     "property1": "...",
     "property2": "..."
 },
 "6177": {
     "property1": "...",
     "property2": "..."
 },
 "5870": {
     "property1": "...",
     "property2": "..."
 },
 "4297": {
     "property1": "...",
     "property2": "..."
 },
 "5743": {
     "property1": "...",
     "property2": "..."
 }
}

for (let x in dataJson){
  //x is the current key
  console.log(x);
  //getting the values of the current key
  console.log(dataJson[x]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...