Typescript将对象转换为数组 - 因为*ngFor不支持对象的迭代

Ank*_*ari 6 javascript arrays javascript-objects typescript

  • 我不想使用for循环将Object转换为数组!如果加倍过程并降低app的性能(我使用Ionic2和Typescript,使用Firebase)

    for(let key in data){array.push(value); }

是否有使用*ngFor迭代对象本身的解决方案(如附图所示).

或者我可以将此Object(如附图所示)转换为Array,以便可以在*ngFor中进行迭代.

在此输入图像描述

Far*_*han 28

您可以使用Object.keys(obj)来获取命名索引.这将返回一个数组结构,您可以进一步使用/自定义.迭代对象值的示例用法可能如下所示

var persons = { 
    john: { age: 23, year:2010},
    jack: { age: 22, year:2011},
    jenny: { age: 21, year:2012}
}
Run Code Online (Sandbox Code Playgroud)

获得迭代器

var resultArray = Object.keys(persons).map(function(personNamedIndex){
    let person = persons[personNamedIndex];
    // do something with person
    return person;
});

// you have resultArray having iterated objects 
Run Code Online (Sandbox Code Playgroud)

  • 我不想循环!有没有办法直接在dom中循环遍历?(否则会执行双循环!) (2认同)

hen*_*y74 6

从Angular 6开始,现在有了一个keyvalue管道运算符。简单执行以下操作:

*ngFor="for item in objectList | keyvalue"

item.key # refers to the keys (134, 135...) in your example
item.value # refers to the object for each key
Run Code Online (Sandbox Code Playgroud)

  • 完美的!这应该是公认的答案。这正是我需要弄清楚的。谢谢你! (2认同)

小智 6

如果不需要索引,可以使用 Object.values(yourObject) 来获取内部对象的数组。