Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Почему получаю ошибку "TypeError: dataCharts.push is not a function"? (https://javascript.ru/forum/misc/67750-pochemu-poluchayu-oshibku-typeerror-datacharts-push-not-function.html)

okuznetsov1 06.03.2017 11:14

Почему получаю ошибку "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: "string"} );
});


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]

laimas 06.03.2017 11:24

Цитата:

Сообщение от okuznetsov1
Почему получаю ошибку "TypeError: dataCharts.push is not a function"?

Потому, что изменяю строку "var dataCharts = [];" на "var dataCharts = {};", а объект не имеет метода .push().

рони 06.03.2017 11:26

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

var dataCharts = { cols: [{id: "year",label: "Год",type: "string"}]};

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


dataCharts.rows = ["не понимаю что вы тут хотите сделать"] ;



console.log(dataCharts);

okuznetsov1 06.03.2017 11:35

На основе массива "arr" нужно сформировать объект следующего вида:


dataCharts = {
              "cols": [{
                id: "year",
                label: "Год",
                type: "string"
              }, {
                id: "1",
                label: "Luxembourg",
                type: "number"
              }, {
                id: "2",
                label: "Switzerland",
                type: "number"
              }, {
                id: "3",
                label: "Norway",
                type: "number"
              }],
              "rows": [{
                c: [{
                  v: "2015"
                }, {
                  v: 101994,
                  f: "101994"
                }, {
                  v: 80603,
                  f: "80603"
                }, {
                  v: 74598,
                  f: "74598"
                }]
              }]
            };

рони 06.03.2017 11:47

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

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: "number"} );
        dataCharts.rows[0].c.push({v : +element.US$, f : element.US$})
});

document.write(JSON.stringify(dataCharts))
  </script>

okuznetsov1 06.03.2017 12:13

спасибо


Часовой пояс GMT +3, время: 21:55.