2013-04-03 3 views
3

используя следующий кодКак решить «нет ошибки« push »?

$.getJSON('services/getCharts.php', function(json) { 
    var $line1 = []; 
    $.each(json.posts, function() { 
     $line1 = $line1.push([this.post.rectime,this.post.actual_value]); 
    }); 
... 
}); 

с JQuery дает мне следующую ошибку:

Uncaught TypeError: Object 1 has no method 'push'

Может кто-нибудь помочь мне найти то, что это не так? Большое спасибо

+0

[MDN '.С()' метод] (https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/push) * "мутирует массив путем добавления данные элементы и возврат новой длины массива. "* – 2013-04-03 16:20:38

ответ

6

Заменить

$line1 = $line1.push([this.post.rectime,this.post.actual_value]); 

с

$line1.push([this.post.rectime,this.post.actual_value]); 

push изменяет массив приемника и возвращает новую длину.

Вы получаете это точное сообщение об ошибке, так как длина (1) оценивается как Number при попытке вызвать на нем метод push.

+0

Большое спасибо за ответ и объяснение. – vpx

4

push метод возвращает новую длину массива, а не новый массив и изменяет массив, она вызывается на:

$.each(json.posts, function() { 
    $line1.push([this.post.rectime,this.post.actual_value]); 
}); 
+1

На самом деле это ** ** возвращает что-то. См. Мой ответ. –

+0

** push ** метод возвращает новую длину массива. –

+0

Но, честно говоря, эта возвращаемая длина, вероятно, никогда не используется кем-либо ... –

0

вот очень плотный синтаксис:

return Array.reduce(things, function(total, thing) { 
    return total.concat([thing]); 
    }, []) 

Это:

return total.concat([result]) 

Сходно эффектов на это:

total.push(result); 
return total; 
Смежные вопросы