2013-04-30 148 views
0

获取价值,我试图让第一值类似于对象:从嵌套对象

{ 
"_id":"123", 
    "list":{"56":{"name":"Great ","amount":100,"place":"Town"},"57":{"name":"Great 2","amount":200,"place":"City"}}, 
    "pop":[2,3] 
} 

这是大约100个左右1个对象。我想从list属性的第一个值中获取amount这100个对象中的每一个?即如此在上面它将是100

我该怎么做?我正在使用下划线JS?

+0

你的 “清单”是一个普通的对象,而不是一个数组,所以没有“第一个”值。 – Bergi 2013-04-30 10:43:31

+0

向我们展示如何访问这100个对象,而不仅仅是一个提取的示例。 – Bergi 2013-04-30 10:45:01

回答

0

您正在将列表定义为object。对象属性按照他们定义的顺序,但我们不能相信它的顺序。我认为Chrome有错误,它https://code.google.com/p/v8/issues/detail?id=164

以下first方法给出了从列表对象第一个元素,此功能将作品大多数情况下,若对象为空则返回undefined值。

var data = { 
"_id":"123", 
    "list":{ 
     "56":{"name":"Great ","amount":100,"place":"Town"}, 
     "57":{"name":"Great 2","amount":200,"place":"City"} 
    }, 
    "pop":[2,3] 
}; 


function first(data){ 

    for (var i in data){ 
     if (data.hasOwnProperty(i)) break;  
    } 

    return data.hasOwnProperty(i) ? data[i] : undefined; 
} 

first(data.list).amount; 

如果要保留列表的顺序,请将它们定义为Array。例如

var data = { 
"_id":"123", 
    "list":[ 
     {"id" : "56" ,"name":"Great ","amount":100,"place":"Town"}, 
     {"id" : "57" ,"name":"Great 2","amount":200,"place":"City"} 
    ], 
    "pop":[2,3] 
}; 

,并访问他们作为data.list[0]

0

如果你需要得到所有键你可以试试这个

function getFirstAmount(obj){ 
    for(var key in obj){ 
     return obj[key].amount; 
    } 
} 

,你可以试试这个

function getAmounts(obj){ 
    var amounts = []; 
    var i = 0; 
    for(var key in obj){ 
      amounts[i] = obj[key].amount; 
      i++; 
     } 
    } 
    return amounts; 
} 

//call function 
    var firstAmount = getFirstAmount(obj.list);