Объедините два вложенных объекта json с javascript и l oop через него с помощью ключа - PullRequest
3 голосов
/ 03 августа 2020

У меня есть несколько json объектов (obj1, obj2 ...), и каждый взят из файлов .txt:

{
  "countries": [
    {
      "Country name": "China",
      "Flag": "CN",
      "Population": 1395380000,
      "undefined": "#688144"
    }, ... ]}

и

{
  "countries": [
    {
      "Country name": "India",
      "Flag": "IN",
      "Population": 1338677000,
      "undefined": "#B78A31"
    }, ...]}

И так далее . Теперь я хочу объединить их следующим образом:

{
  "countries": [
    {
      "Country name": "China",
      "Flag": "CN",
      "Population": 1395380000,
      "undefined": "#688144"
    },
 {
      "Country name": "India",
      "Flag": "IN",
      "Population": 1338677000,
      "undefined": "#B78A31"
    },
 ... ]}

Итак, я могу l oop через такие данные:

let obj1 = {}; //saved Data From Txt1;
let obj2 = {}; //saved Data From Txt2
...
let obj = combined?

for (var key in obj.countries) {
var num1 = obj.countries[key].Population+popholder;
if (target >= popholder && target <= num1) {
  var country = obj.countries[key]['Country name'];
  var testas = document.getElementById("countryname")
}}

Как мне этого добиться?

Ответы [ 3 ]

3 голосов
/ 03 августа 2020

Просто объедините массивы:

const obj1 = {
    "countries": [{
            "Country name": "China",
            "Flag": "CN",
            "Population": 1395380000,
            "undefined": "#688144"
        }
    ]
};

const obj2 = {
    "countries": [{
            "Country name": "India",
            "Flag": "IN",
            "Population": 1338677000,
            "undefined": "#B78A31"
        }
    ]
};

const result = {
    countries: [...obj1.countries, ...obj2.countries]
};

console.log(result);
2 голосов
/ 03 августа 2020

Вы можете создать новый объект с теми же свойствами countries и использовать Array#concat, чтобы объединить все массивы стран в один:

const obj1 = {
  "countries": [{
    "Country name": "China",
    "Flag": "CN",
    "Population": 1395380000,
    "undefined": "#688144"
  }, /* ... */ ]
};

const obj2 = {
  "countries": [{
    "Country name": "India",
    "Flag": "IN",
    "Population": 1338677000,
    "undefined": "#B78A31"
  }, /* ... */ ]
};

const obj3 = {
  "countries": [{
    "Country name": "Sealand",
    "Flag": "",
    "Population": 27,
    "undefined": "#0000FF"
  }, /* ... */ ]
};

const combined = { 
  countries: [].concat(
    obj1.countries, 
    obj2.countries, 
    obj3.countries
  )
};

console.log(combined);

Если у вас есть массив объектов, вы можете объединить Array#map с синтаксисом распространения , чтобы извлечь countries массивы и объединить их в один:

const obj1 = { "countries": [{ "Country name": "China", "Flag": "CN", "Population": 1395380000, "undefined": "#688144" }, /* ... */ ]};
const obj2 = { "countries": [{ "Country name": "India", "Flag": "IN", "Population": 1338677000, "undefined": "#B78A31" }, /* ... */ ]};
const obj3 = { "countries": [{ "Country name": "Sealand", "Flag": "", "Population": 27, "undefined": "#0000FF" }, /* ... */ ]};

const objArr = [obj1, obj2, obj3];

const combined = { 
  combined: [].concat(
    ...objArr.map(x => x.countries)
  )
};

console.log(combined)
1 голос
/ 03 августа 2020

Вы можете push все массивы в один.

const obj1 = {
  "countries": [
    {
      "Country name": "China",
      "Flag": "CN",
      "Population": 1395380000,
      "undefined": "#688144"
    }, ]}
const obj2 = {
  "countries": [
    {
      "Country name": "India",
      "Flag": "IN",
      "Population": 1338677000,
      "undefined": "#B78A31"
    },]};
const res = [obj1, obj2, /*...*/]
  .reduce((acc,{countries})=>(acc.countries.push(...countries),acc), {countries: []});
console.log(res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...