2015-01-30 3 views
0

Я создаю очень упрощенную версию корзины для перетаскивания с jqueryui. Моя проблема заключается в добавлении данных (id, name, price) в массив.Проблема с матричной матрицей Javascript

Я пробовал несколько методов добавления данных (также массив) в основной контейнер (массив). Но я получаю эту ошибку: Uncaught TypeError: undefined is not a function

var data = []; 
function addproduct(id,name,price){ 
    //var d = [id,name,price]; 
    data[id]["name"] = name; 
    data[id]["price"] = price; 
    data[id]["count"] = data[id]["count"]+1; 
    console.log(data); 
} 

addproduct() функция может быть вызвана нажатием кнопки

+1

это console.log, не console.print – Winchestro

+1

Вы по крайней мере, для инициализации 'данных [ID] = {};' перед добавлением свойств к нему. Кроме того, 'data' действительно массив с последовательными числовыми индексами? Или вы должны использовать объект вместо массива. – jfriend00

+0

@ jfriend00, который (далее) сломал поле счетчика ... – Alnitak

ответ

1

Это не совсем понятно мне, какой тип структуры данных, вы хотите, чтобы в конечном итоге после вы добавили в корзину несколько предметов. Таким образом, этот ответ является предположением, основанным на том, как он выглядит, как вы пытаетесь сделать в своем вопросе, но если вы показываете литерал Javascript для того, что вы хотите, чтобы фактическая структура выглядела после нескольких элементов в корзине, мы можете быть уверены, что сделаем лучшую рекомендацию.

Вы должны инициализировать объект или массив javascript, прежде чем сможете его использовать. Обычный способ сделать это - проверить, существует ли он, а если нет, то инициализируйте его перед назначением ему. И, поскольку вы держите count, вы также захотите инициализировать счет.

var data = []; 
function addproduct(id,name,price){ 
    if (!data[id]) { 
     // initialize object and count 
     data[id] = {count: 0}; 
    } 
    data[id]["name"] = name; 
    data[id]["price"] = price; 
    ++data[id]["count"]; 
    console.log(data); 
} 

И FYI, массивы используются для числовых индексов. Если вы используете имена свойств, такие как «имя» и «цена» для доступа к свойствам, вы должны использовать объект вместо массива.


И, я хотел бы предложить вам использовать точечный синтаксис для известных строк свойств:

var data = []; 
function addproduct(id,name,price){ 
    if (!data[id]) { 
     // initialize object and count 
     data[id] = {count: 0}; 
    } 
    data[id].name = name; 
    data[id].price = price; 
    ++data[id].count; 
    console.log(data); 
} 
+0

хорошо! спасибо, я провожу 2 часа головокружения над этой штукой :) – Thyvo

0

Похоже, что вы хотите, это массив объектов, хотя я должен был бы более подробное описание вашей проблемы, чтобы быть ясным.

var data = [] 

function addproduct(id, name, price) 
{ 
    data.push({'id': id, 'name':name, 'price': price, 'count': ++count}); 
    console.log(data); 

} 
Смежные вопросы