Javascript对象的操作
Manipulation of Javascript objects
我的javascript中有一个对象,看起来像这样:
{"data":[{"t":{
"level":"35",
"longtitude":"121.050321666667",
"latitude":"14.6215366666667",
"color":"#040098"}},
{"t":{
"level":"31",
"longtitude":"121.050316666667",
"latitude":"14.621545",
"color":"#040098"}},
{"t":{
"level":"29",
"longtitude":"121.050323333333",
"latitude":"14.62153",
"color":"#040098"}},
// .....
我想做的是遍历对象的内容,这样我就可以独立地将它们推送到各自的数组中。我有一个经度、纬度、颜色和级别的数组。
所以我尝试了以下方法:
var size = 0, key;
for (key in result) {
if (result.hasOwnProperty(key)) size++;
alert(result.data[size]);
}
-->但这只会提醒我"[对象对象]"
success: function(result){
var size = 0, key;
for (key in result) {
for(var attr in key){
alert(attr['latitude']);
}
}
}
-->这给了我未定义的结果[key]
我已经通过这些代码检查了我的物体的大小只有1
var size = 0, key;
for (key in result) {
if (result.hasOwnProperty(key)) size++;
}
alert(size);
我相信只有"数据"被读取。而"数据"中的其他内容则被忽略。
我读过这个,这个,在这里输入链接描述,还有这个,但它们似乎都处理不同的对象结构。提前感谢您的帮助。
更新使用console.log(),我已经确认,如果我没有弄错的话,只有第一个属性被提取
t
Object { level="35", longtitude="121.0508", latitude="14.6204083333333", more...}
color "#040098"
latitude "14.6204083333333"
level "35"
longtitude "121.0508"
我试过这个
for (key in result) {
if (result.hasOwnProperty(key)) size++;
console.log(result.data[size]['level']);
}
-->但上面写着未定义的
基于我的对象的结构
data:[{"t":{'others'},'others'...]
如何读取"数据"中的所有内容?每个"数据"都有"t"。
更新:不建议使用for...in
构造在数组上迭代。另一种选择是常规的for循环(当然,每种方法都有各自的优势):
for(var i=0; i<results.data.length; i++){
alert(results.data[i]['t']['latitude']);
// etc...
}
请注意JSON的结构。还要注意,javascript foreach循环迭代键/索引,而不是值。请参阅演示:http://jsfiddle.net/g76tN/
success: function(result){
var latitudes = [];
// and so on...
for (var idx in result.data ) {
if( result.data.hasOwnProperty(idx) ){
alert( result.data[idx]['t']['latitude'] );
// So you would do something like this:
latitudes.push ( result.data[idx]['t']['latitude'] );
// and so on...
}
}
}
注意,对于收集数组中对象的属性,jQuery$.map()
(或者说本机js数组映射)是一个整洁、有用的替代方法。
var latitudes = $.map( result.data, function(n){
return n['t']['latitude'];
});
// and so on...
假设result
是您的对象,这应该只是在data
数组上迭代的问题:
for (var i = 0; i < result.data.length; ++i) {
console.log(result.data[i].t.latitude);
...
}
这并不难做到,如下所示。但是,为什么要采用像t
这样有用的对象,并将它们变成这样的数组呢?
var levels = [], longitudes= [], latitudes = [], colors = [];
var result = {"data":[{"t":{
"level":"35",
"longtitude":"121.050321666667",
"latitude":"14.6215366666667",
"color":"#040098"}},
{"t":{
"level":"31",
"longtitude":"121.050316666667",
"latitude":"14.621545",
"color":"#040098"}},
{"t":{
"level":"29",
"longtitude":"121.050323333333",
"latitude":"14.62153",
"color":"#040098"}}
]};
var data = result.data;
var i, len, t;
for (i = 0, len = data.length; i < len; i++) {
t = data[length].t;
levels[i] = t.level;
longitudes[i] = t.longtitude;
latitudes[i] = t.latitude;
colors[i] = t.color;
}
请参阅http://jsfiddle.net/VGmee/,它保留了hasOWnProperty
(这很重要),而您拼错的"经度"则不是。
var data = input.data,
result = {level: [], longtitude: [], latitude: [], color: []};
for (var i = 0, n = data.length; i < n; i += 1) {
var info = data[i].t;
for (var property in info) {
if (info.hasOwnProperty(property)) {
result[property].push(info[property]);
}
}
}
console.log(result.level);
console.log(result.latitude);
console.log(result.longtitude);
console.log(result.color);
这需要结果数组在输入数组中实际具有属性,但您可以根据需要添加错误处理。
相关文章:
- javascript对象操作:根据指定条件选择属性
- 将数组对象传递到struts2中的操作类
- 无法在mvc视图中使用ajax调用获取操作返回的模型对象列表
- 我应该如何将响应数据保存在对象(json)中以获得更好的操作和性能
- 响应应包含一个对象,但得到的却是GET操作的数组
- 如何将原型用于自定义方法和对象操作
- 以非ajax方式将js对象传递给mvc操作
- 排序和操作json对象,javascript
- 使用查询将对象数组发布到asp.net-mvc控制器操作的正确方法是什么
- 在angularjs/javascript中操作对象
- 操作对象以创建不同的格式
- 为什么您可以在不引用“this”的情况下操作对象属性
- 操作对象的属性:将方法分配给属性
- Javascript/jQuery 范围和上下文问题,当试图操作对象的“引用”时
- Javascript D3.js操作对象数组
- 如何操作对象's结构转换成'点符号'-样式数组
- 用JS操作对象
- 在对象内循环数组,并根据数组值操作对象数据
- Javascript操作对象:map
- 使用鼠标在浏览器中使用three.js操作对象