获取对象文字键的值

时间:2014-02-17 23:35:35

标签: javascript arrays object literals

我在数组中有一个对象文字,我正在尝试访问密钥:名称和价格。

这是我的目标:

var ProductList = [  
    { "1": { Name: "Item name", Price: "0.99" } },  
    { "2": { Name: "Item name", Price: "0.99" } },  
    { "3": { Name: "Item name", Price: "8.99" } },  
    { "4": { Name: "Item name", Price: "8.99" } }  
  ];

数字1,2,3,4是产品商品ID,所以我试图这样做:

console.log(ProductList[1].Name);

但它似乎没有起作用。

谢谢, 标记

3 个答案:

答案 0 :(得分:3)

试试这个:因为你将哈希存储在一个数组中。看来,我可能错了,你想根据你的产品ID访问数组elem位置 - 1。如果您的身份证有所不同,即.. 123,587,ABC987,则以下内容无法使用。

var ProductList = [

    {"1": {Name: "Item name", Price: "0.99"}},

    {"2": {Name: "Item name", Price: "0.99"}},

    {"3": {Name: "Item name", Price: "8.99"}},

    {"4": {Name: "Item name", Price: "8.99"}}

];


var prodRef = 1; // in this example

ProductList[prodRef - 1][prodRef].Name;

在设置对象时,我会亲自执行以下操作。

var ProductList = {

    "1": {Name: "Item name", Price: "0.99"},

    "2": {Name: "Item name", Price: "0.99"},

    "3": {Name: "Item name", Price: "8.99"},

    "4": {Name: "Item name", Price: "8.99"}

};

   // so, you can just always access it via your productID.
    var prodRef = 4;
    ProductList[prodRef].Name

答案 1 :(得分:2)

推荐方法

我建议修改数组中的对象以包含ID属性。使用此属性,您可以使用数组上的filter方法按ID属性查找元素。

var ProductList = [
    {ID: "11", Name: "Item name", Price: "0.99"},
    {ID: "22", Name: "Item name", Price: "0.99"},
    {ID: "33", Name: "Item name", Price: "8.99"},
    {ID: "44", Name: "Item name", Price: "8.99"}
];

function findById(arr, id){
    var results = arr.filter(function(e){
        return e.ID == id;
    });
    return (results.length) ? results[0]:undefined;

}

Orignal Array

如果您必须坚持使用原始阵列,则可以应用以下内容。

您必须使用与数组中每个对象关联的属性名称来访问该对象:

console.log(ProductList[1]["2"].Name);

如果你不能改变这些对象的结构,我会做一个辅助函数:

var ProductList = [
{"1": {Name: "Item name", Price: "0.99"}},
{"2": {Name: "Item name", Price: "0.19"}},
{"3": {Name: "Item name", Price: "8.99"}},
{"4": {Name: "Item name", Price: "8.99"}}
];

function getInternal(arr, index){
    return arr[index][index+1];
}

var obj = getInternal(ProductList, 1);
console.log(obj.Name);

JS小提琴: http://jsfiddle.net/68WDZ/

答案 2 :(得分:1)

我认为你可能正在寻找一个Object而不是一个数组。

var productList = {
    "1": { name: "Millenium Falcon", price: 20 },
    "2": { name: "Storm Troopers", price: 5.99 },
    ...
}

console.log(productList["1"].name == "Millenium Falcon");
console.log(productList["2"].price == 5.99);

当然,如果您无法更改所获得的数据,则必须使用productList [0] [“1”]。名称