Javascript: как создать объект из нескольких массивов и переменных?

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

У меня есть 2 разных набора массивов, которые необходимо объединить в объект

 x1 = ['US', 'UK', 'China'];
y1 = [1,2,3];
name1 = 'CO2';

x2 = ['US', 'UK', 'China'];
y2 = [4,5,6];
name2 = 'GHG';
 

x1 и x2 всегда одинаковы.

Мой идеальный результат

 
[{'country': 'US', 'CO2': 1, 'GHG': 2},
{'country': 'UK', 'CO2': 2, 'GHG': 5},
{'country': 'China', 'CO2': 3, 'GHG': 6}]
 

Я пытался создать такой объект

 var result = {};

x1.forEach(function (key,i) { result.country = key, result[name1] = y1[i] });
 

но он возвращает только последнее значение

 {country: "China", CO2: 3}
 

И вот так

 x1.forEach((key, i) => result[key] = y1[i]);
 

Но тогда имя не играет роли

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

Комментарии:

1. Вы могли бы сделать что-то вроде этого: let result = x1.map((v,i)=>({"country":v, [name1]:y1[i], [name2]:y2[i]}))

2. вы уверены, что значение GHG in {'country': 'US', 'CO2': 1, 'GHG': 2} не является опечаткой?

Ответ №1:

 const x1 = ['US', 'UK', 'China'];
const y1 = [1, 2, 3];
const name1 = 'CO2';

const x2 = ['US', 'UK', 'China'];
const y2 = [4, 5, 6];
const name2 = 'GHG';

const result = x1.map((country, index) => ({
  country,
  [name1]: y1[index],
  [name2]: y2[index]
}));

console.log(result); 

Ответ №2:

Я думаю, вы можете попробовать что-то вроде этого, в основном, мы проходим через x1 и строим результат с соответствующими данными.

 var result = {}
for(i = 0; i < x1.length; i  ) {
  result[i] = {}
  result[i]["country"] = x1[i]
  result[i][name1] = y1[i]
  result[i][name2] = y2[i]
}

console.log(result)
 

Ответ №3:

Вы можете сделать это следующим образом (примечание: переменная x2 не требуется)-

 function createObj(x1,y1,y2, name1, name2){
  var obj1={},
         obj2={},
         obj3={};
  var result=[obj1, obj2, obj3];
  result.forEach((obj, i)=>{
    obj.country=x1[i];
    obj[name1]=y1[i];
    obj[name2]=y2[i];
  })

  return resu<
  
}
 

В вашем коде вы получаете последнее значение только потому, что каждый раз внутри цикла for each вы переопределяете значения объекта

Ответ №4:

 let x1=["US","UK","China"],y1=[1,2,3],name1="CO2",x2=["US","UK","China"],y2=[4,5,6],name2="GHG";

let result = x1.map((e,idx) => ({country:x1[idx],co2:y1[idx],GHG:y2[idx]}))

console.log(result)