Вход

Просмотр полной версии : Почему получаю ошибку "TypeError: dataCharts.push is not a function"?


okuznetsov1
06.03.2017, 11:14
Мне нужно сформировать из Массива содержащего 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
Почему получаю ошибку "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
спасибо