@okuznetsov1

Почему получаю ошибку «TypeError: dataCharts.push is not a function»?

Мне нужно сформировать из Массива содержащего js-объекты - новый js-объект c объектами, но в итоге получается сформировать только массив с объектами:

Получилось сформировать так:
Array [ Object, Object ]

А нужно чтобы получился объект:
Object { cols: Array[4], rows: Array[1] }

Моя реализация:

var arr = [
	{Rank:1,Country:"Moscow",US$:"101994"},
	{Rank:2,Country:"Luxembourg",US$:"101"},
	{Rank:3,Country:"Monaco",US$:"1019"}
]

var dataCharts = [];
dataCharts.push({ cols: [{id: "year",label: "Год",type: "string"}]});
arr.forEach(function (element, index) {
        dataCharts[0].cols.push( {id: element.Rank,label: element.Country,type: element.US$} );
});


dataCharts.push( { rows:[ { c: [ {v: "2015"} ] } ] } );
arr.forEach(function (element, index) {
        dataCharts[1].rows[0].c.push( {v: "101994", f: "101994"} );
});


console.log(dataCharts);


1) Если изменяю строку "var dataCharts = [];" на "var dataCharts = {};", получаю ошибку "TypeError: dataCharts.push is not a function"

2) Попытался конвертировать таким вот образом:

var obj = {};
dataCharts.forEach(function(element, index){
    obj[index] = element;
});
console.log(obj);


получаю вот такой такой вариант:
Object [Object, Object]
  • Вопрос задан
  • 378 просмотров
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
var dataCharts = {
    cols: [
        {id: "year",label: "Год",type: "string"}
    ],
    rows: [
        {c: [{v: "2015"}]}
    ],
};

arr.forEach(function (element, index) {
    dataCharts.cols.push({id: element.Rank,label: element.Country,type: element.US$});
});

arr.forEach(function (element, index) {
    dataCharts.rows[0].c.push({v: "101994", f: "101994"});
});


Если изменяю строку "var dataCharts = [];" на "var dataCharts = {};", получаю ошибку "TypeError: dataCharts.push is not a function"
Метод push есть у массивов, но его нет у объектов.

Если вам сложно сходу построить сложный объект, стройте его по частям:
var cols = [
     {id: "year",label: "Год",type: "string"},
];

arr.forEach(function (element, index) {
    cols.push({id: element.Rank,label: element.Country,type: element.US$});
});

var rows = [
    {v: "2015"},
];

arr.forEach(function (element, index) {
    rows.push({v: "101994", f: "101994"});
});

var dataCharts = {
    cols: cols,
    rows: [
        {c: rows},
    ],
};
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы