2013-09-04 2 views
0

У меня есть несколько объектов, как эта структура: enter image description hereПолучить значение из объекта в JavaScript

Затем я создаю функцию, чтобы обновить количество товара, который соответствовал поисковым ID:

function setQuantityInCartByID(json, itemID, val){ 
    for(var i in json){ 
     console.log(json[i].ID); 
     if(json[i].ID == itemID){ 
      json[i].QuantityInCart = val; 
      break; 
     } 
    } 
    return json; 
} 

Это мой JSON;

{"DepartmentID":12,"CategoryID":117,"BrandID":19,"BrandImage":"         ","BrandName":"General","ID":708,"Name":"Grand 6Port Power Center","PictureName":"http://111.92.241.110/wwwProducts/unknown.PNG","Notes":"","PriceShow":"$10.00","Price":0,"PriceA":0,"PriceB":0,"PriceC":0,"WebsitePrice":0,"Quantity":2,"QuantityInCart":2,"LastUpdated":"/Date(1378108144050)/","Active":1,"PriceLevel":0,"NewProductImage":"http://111.92.241.110/wwwProducts/newproduct.png","isNewProduct":false,"isInStock":"10 Available in Stock(s)!","NewArrival":0,"ExpireNewArrival":"/Date(-62135596800000)/","NewPromotion":0,"ExpireNewPromotion":"/Date(-62135596800000)/"} 

{"DepartmentID":12,"CategoryID":117,"BrandID":19,"BrandImage":"         ","BrandName":"General","ID":709,"Name":"Grand 6Port Power Center","PictureName":"http://111.92.241.110/wwwProducts/unknown.PNG","Notes":"","PriceShow":"$10.00","Price":0,"PriceA":0,"PriceB":0,"PriceC":0,"WebsitePrice":0,"Quantity":2,"QuantityInCart":2,"LastUpdated":"/Date(1378108144050)/","Active":1,"PriceLevel":0,"NewProductImage":"http://111.92.241.110/wwwProducts/newproduct.png","isNewProduct":false,"isInStock":"10 Available in Stock(s)!","NewArrival":0,"ExpireNewArrival":"/Date(-62135596800000)/","NewPromotion":0,"ExpireNewPromotion":"/Date(-62135596800000)/"}  

{"DepartmentID":12,"CategoryID":117,"BrandID":19,"BrandImage":"         ","BrandName":"General","ID":710,"Name":"Grand 6Port Power Center","PictureName":"http://111.92.241.110/wwwProducts/unknown.PNG","Notes":"","PriceShow":"$10.00","Price":0,"PriceA":0,"PriceB":0,"PriceC":0,"WebsitePrice":0,"Quantity":2,"QuantityInCart":2,"LastUpdated":"/Date(1378108144050)/","Active":1,"PriceLevel":0,"NewProductImage":"http://111.92.241.110/wwwProducts/newproduct.png","isNewProduct":false,"isInStock":"10 Available in Stock(s)!","NewArrival":0,"ExpireNewArrival":"/Date(-62135596800000)/","NewPromotion":0,"ExpireNewPromotion":"/Date(-62135596800000)/"} 

Проблема: console.log(json[i].ID); результат не определен.

+2

Можете ли вы опубликовать пример jsfiddle? – elclanrs

+0

Вам нужно будет показать нам, что именно представляет ваш аргумент 'json'. Похоже, ваш код ожидает, что он будет массивом объектов или картой объектов, но я уверен, что это не один из них. – jfriend00

+0

Что такое 'json'? – xdazz

ответ

0

Предыдущая ссылка не кажется, применяются после того, как я сделал скрипку, чтобы проверить это. Я также обновил первый пример.

http://jsfiddle.net/AFZhT/

Это также предполагает, что вы сделали что-то вроде var json = JSON.parse(data)

Если возвращающий массив объектов, данные должны быть аналогичны ниже. Это будет передан в setQuantityInCartByID функции в качестве параметра JSon:

var json = [{"DepartmentID":12,"CategoryID":117,"BrandID":19,"BrandImage":"         ","BrandName":"General","ID":708,"Name":"Grand 6Port Power Center","PictureName":"http://111.92.241.110/wwwProducts/unknown.PNG","Notes":"","PriceShow":"$10.00","Price":0,"PriceA":0,"PriceB":0,"PriceC":0,"WebsitePrice":0,"Quantity":2,"QuantityInCart":2,"LastUpdated":"/Date(1378108144050)/","Active":1,"PriceLevel":0,"NewProductImage":"http://111.92.241.110/wwwProducts/newproduct.png","isNewProduct":false,"isInStock":"10 Available in Stock(s)!","NewArrival":0,"ExpireNewArrival":"/Date(-62135596800000)/","NewPromotion":0,"ExpireNewPromotion":"/Date(-62135596800000)/"}, 

    {"DepartmentID":12,"CategoryID":117,"BrandID":19,"BrandImage":"         ","BrandName":"General","ID":709,"Name":"Grand 6Port Power Center","PictureName":"http://111.92.241.110/wwwProducts/unknown.PNG","Notes":"","PriceShow":"$10.00","Price":0,"PriceA":0,"PriceB":0,"PriceC":0,"WebsitePrice":0,"Quantity":2,"QuantityInCart":2,"LastUpdated":"/Date(1378108144050)/","Active":1,"PriceLevel":0,"NewProductImage":"http://111.92.241.110/wwwProducts/newproduct.png","isNewProduct":false,"isInStock":"10 Available in Stock(s)!","NewArrival":0,"ExpireNewArrival":"/Date(-62135596800000)/","NewPromotion":0,"ExpireNewPromotion":"/Date(-62135596800000)/"} ,  

    {"DepartmentID":12,"CategoryID":117,"BrandID":19,"BrandImage":"         ","BrandName":"General","ID":710,"Name":"Grand 6Port Power Center","PictureName":"http://111.92.241.110/wwwProducts/unknown.PNG","Notes":"","PriceShow":"$10.00","Price":0,"PriceA":0,"PriceB":0,"PriceC":0,"WebsitePrice":0,"Quantity":2,"QuantityInCart":2,"LastUpdated":"/Date(1378108144050)/","Active":1,"PriceLevel":0,"NewProductImage":"http://111.92.241.110/wwwProducts/newproduct.png","isNewProduct":false,"isInStock":"10 Available in Stock(s)!","NewArrival":0,"ExpireNewArrival":"/Date(-62135596800000)/","NewPromotion":0,"ExpireNewPromotion":"/Date(-62135596800000)/"}]; 

В вашей странице, ниже будет получить объект JSON из выше, и теперь он должен иметь длину на нем.

function setQuantityInCartByID(json, itemID, val){ 
for(var i in json){ 
     console.log(json[i].ID); 
     if(json[i].ID == itemID){ 
      json[i].QuantityInCart = val; 
      break; 
     } 
    } 
    return json; 
} 

Вот старый способ, который, кажется, думал о:

function setQuantityInCartByID(json, itemID, val){ 
    for(var i = 0; i <json.length;i++) 
    { 
     console.log(json[i].ID); 
     if(json[i].ID === itemID){ 
      json[i].QuantityInCart = val; 
      break; 
     } 
    } 
    return json; 
} 
+0

Предполагается, что вы возвращаете массив элементов в объекте json. – ps2goat

+0

'json.length' является' undefined'. – titi

+0

@titi, я исправил код и добавил простой jsfiddle, чтобы проверить его. Вам в основном просто нужно передать объекты как массив, как я показал в моем примере. (квадратные скобки вокруг всех объектов, отдельные объекты с запятыми). – ps2goat

3

Я не думаю, что вам нужен цикл for. Это выглядит, как если бы ваш параметр JSON уже есть объект, поэтому нет необходимости в цикле, хотя вещи, просто идти json.ID

0

Вы можете получить доступ к свойствам непосредственно, например:

if (json.ID == itemID) { 
    json.QuantityInCart = val; 
} 
0

Что у вас есть это JavaScript Object, а не массив, и вы обращаетесь свойства не indicies.

Я думаю, что вы пытаетесь выполнить доступ к свойствам объекта, не зная имен. Для этого вы можете использовать для ... в цикле:

for(key in data) { 
    if(data.hasOwnProperty(key)) { 
     var value = data[key]; 
     //do something with value; 
    } 
} 

Если вы хотите использовать простой JavaScript, то это время вы можете использовать приведенный выше код.

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