Я столкнулся с проблемами при создании массива объектов с использованием массива и массива массивов. В моем сценарии у меня 400 столбцов и 5000 строк. Имея имена столбцов в отдельном массиве и пользовательские данные в массиве массивов.
Мои ожидания: Массив объектов = Массив (имя_столбца) + Массив_массивов (Пользовательские_данные)
var cols_names=['name','address','phoneno'];
var arr_of_arrs=[
['ABC','INDIA','0989898976'],
['XYZ','USA','0989898998'],
['CDE','UK','0989898956']
];
const arr_of_obj = arr_of_arrs.map((...cols_names) => ({cols_names}));
console.info(arr_of_obj);
Я получил такой вывод:
[
{ cols_names: [ [Array], 0, [Array] ] },
{ cols_names: [ [Array], 1, [Array] ] },
{ cols_names: [ [Array], 2, [Array] ] }
]
мне нужно вот так:
[
{
"name":"ABC",
"address":"INDIA",
"phoneno":"0989898976"
},
{
"name":"XYZ",
"address":"USA",
"phoneno":"0989898998"
},
{
"name":"CDE",
"address":"UK",
"phoneno":"0989898956"
}
]
Примечание. Я не могу написать такой код ниже, потому что у меня 400 столбцов. Мне не следует статически указывать в коде имена всех столбцов:
const arr_of_obj = arr_of_arrs.map(([name,address,phoneno]) => ({name, address,phoneno}));
console.info(arr_of_obj);
Поскольку индексы одинаковы, вы можете перебирать их и выполнять операции следующим образом:
var cols_names = ['name', 'address', 'phoneno'];
var arr_of_arrs = [
['ABC', 'INDIA', '0989898976'],
['XYZ', 'USA', '0989898998'],
['CDE', 'UK', '0989898956']
];
var result = arr_of_arrs.map(function(arr) {
var obj = {};
cols_names.forEach(function(col, index) {
obj[col] = arr[index];
});
return obj;
});
console.info(result);
Попробуйте следующее:
var cols_names=['name','address','phoneno'];
var arr_of_arrs=[
['ABC','INDIA','0989898976'],
['XYZ','USA','0989898998'],
['CDE','UK','0989898956']
];
const res=arr_of_arrs.map(r=>Object.fromEntries(r.map((v,i)=>[cols_names[i],v])));
console.info(res)
Это очень похоже на то, что сделал @NeERAJTK, только вместо цикла .map()
используется .forEach()
.
Это хороший лайнер!