2017-03-17 88 views
1

我使用离子2火力地堡3和I有一个返回连键和值的JSON的读取方法,这是结构将数组中的对象推入其数组中?

{ 
"1475323200" : { 
    "-KfNUUZf9ehNdVSCiBO": { 
    "date": 1489690818, 
    "msg": "Mussum Ipsum", 
    "title": "Pagamentos" 
    } 
}, 
"1478001600": { 
    "-KfNUUZf9ehNdVSCiBO": { 
    "date": 1489690818, 
    "msg": "Mussum Ipsum", 
    "title": "Pagamentos" 
    } 
    } 
} 

的一部分,这是我现在还是什么有代码我正在努力去做。我将解释它

ionViewWillLoad() { 
    firebase.database().ref('Administrative/Informs').on('value', snap => { 
     if (snap.val() != null) { 
      let data = snap.val(); //will be an object 
      this.organizer(data).then(res => { 
       console.log(this.informs); 
      }) 
     } else { 
      this.noInforms == true; 
     } 
    }); 
} 

organizer = (data: any): Promise<boolean> => { 
    for (var i = Object.keys(data).length; i > 0; i--) { 
     this.informs.push(data[i]); 
    } 

    return new Promise<boolean>(res => { 
     res(true); 
    }) 
} 

上火力点的“价值”查询返回我的升序格式的密钥之后,但在按键later'll与momentJS可以使用一个月来informatives分开,但我必须使用那么所以从实际月份去保存了最新的降格式,现在它的2016/dec > 2017/jan > 2017/feb > ...,我需要2017/mar > 2017/feb > 2017/jan > ...

我尝试这样的方式来实现这一目标:

  • 使用this.informs = Object.keys(snap.val()).reverse(); |它仅保存密钥和更6个或7未定义字段
  • 使用对内部进行,像for(key in snap.val()){ this.informs.push(key)}和其他用于推动所有值的新对象内,然后它归因像this.informs[key] = values;
  • 推对象内部this.informs[key]内部。
  • 获取值child_added,但它返回给我的每个孩子没有我将用来获取月份的密钥。

那么,如何将同一个对象保存在一个数组中但是通过第一个键反转?正弦我会用它在* ngFor我需要它是一个具有长度参数的数组。

+0

我有点困惑现在。数据(发送给这个组织者的数据是一个数组还是一个对象?因为使用Object.keys().length',一个数字然后使用'data [i] '所以如果数据是一个数组,为什么要使用Object.keys?如果数据是一个对象,你的意思是使用'data [Object.keys(data)[i]]'来选择记录吗?或者我在这里丢失了什么? – Shilly

+0

@Shilly哦,对不起,因为我的代码不是英文的,我决定翻译它,所以我更好的让人们理解。 –

回答

0

Object.keys将以任意顺序创建对象的键的数组。如果你想给这些键进行排序,你可以做这样的事情:

var data = { 
 
"1475323200" : { 
 
    "-KfNUUZf9ehNdVSCiBO": { 
 
    "date": 1489690818, 
 
    "msg": "Mussum Ipsum", 
 
    "title": "Pagamentos" 
 
    } 
 
}, 
 
"1478001600": { 
 
    "-KfNUUZf9ehNdVSCiBO": { 
 
    "date": 1489690818, 
 
    "msg": "Mussum Ipsum", 
 
    "title": "Pagamentos" 
 
    } 
 
    } 
 
} 
 

 
window.informs = []; 
 
Object.keys(data).sort((a,b) => {parseInt(a) - parseInt(b)}).forEach(k => this.informs.push(data[k])) 
 
console.log(informs);

.sort((a,b) => {parseInt(a) - parseInt(b)})将在升序排序键,按降序排序使用.sort((a,b) => {parseInt(b) - parseInt(a)})