Javascript *NGF用于具有不同键和级别的角度通过嵌套数组

Javascript *NGF用于具有不同键和级别的角度通过嵌套数组,javascript,angular,pipe,for-in-loop,nest-nested-object,Javascript,Angular,Pipe,For In Loop,Nest Nested Object,我有一个具有“不对称”结构的对象数组,其中键不同,并且有一些嵌套对象。 我需要通过这个循环: obj = [{ "d14042018": { "date": "14-04-2018", "value": 5 }, "d02042018": { "date": "02-04-2018

我有一个具有“不对称”结构的对象数组,其中键不同,并且有一些嵌套对象。 我需要通过这个循环:

  obj = [{
      "d14042018": {
        "date": "14-04-2018",
        "value": 5
      },
      "d02042018": {
        "date": "02-04-2018",
        "value": 10
      },
      "name": "my name"
    },
    {
      "d14042018": {
        "date": "14-04-2018",
        "value": 15
      },
      "d02042018": {
        "date": "02-04-2018",
        "value": 25
      },
      "name": "my second name"
    }]
我需要的是返回这样的结构

第一行=我的名字5 10

第二行=我的第二个名字15 25

我在一个定制的烟斗里试了一个

    import { Pipe, PipeTransform } from '@angular/core';
    @Pipe({
      name: 'keys'
    })
    export class KeysPipe implements PipeTransform {

      transform(value: any, args?: any): any {
        let keys: string;

        if (value) {
          for (var prop in value) {
      
            if(typeof value[prop] != 'object') {
               keys = value[prop];
            } else {
              for (var subprop in prop) {
                keys = prop.subprop;
              }
            }
          }
        }
        return keys;
      }
    }
但是身份证不起作用


有人能帮忙吗?

我建议避免使用管道进行此类高级数据操作,而只需生成必要的数据结构,以便在类似
ngOnInit()
的内容中或在绑定到公共变量之前显示/使用。您可以将
Object.keys()
Array.prototype.map()
Array.prototype.join()
和三元语句结合使用来生成数据行

类型脚本:

this.rows = Object.keys(obj).map(key => {
  const o = this.data[key];
  const { name } = o;
  const values = Object.keys(o)
                   .map(k => o[k]['value'])
                   .join(' ');

  return { name, values };
});
<ul>
  <li *ngFor="let row of rows">{{row.name}} {{row.values}}</li>
</ul>
HTML:

this.rows = Object.keys(obj).map(key => {
  const o = this.data[key];
  const { name } = o;
  const values = Object.keys(o)
                   .map(k => o[k]['value'])
                   .join(' ');

  return { name, values };
});
<ul>
  <li *ngFor="let row of rows">{{row.name}} {{row.values}}</li>
</ul>
    {{row.name}{{{row.values}
这是一个正在实施的计划


希望这有帮助

一个选项是将每个对象的键减少到一个数组中,如果希望每个项都成为字符串,则只需联接即可:

const obj = [...]; // your example array
const flattened = obj.map(
    o => Object.keys(o).reduce(
        (acc,cur) => cur === 'name' 
            ? [o[cur], ...acc] // key is 'name', push value to first
            : [...acc, o[cur].value] // other than name, push value of value last
        , []).join(' ')
    );

钥匙的名字总是在那里,但是你猜的日期可能会改变。。。因此,我不知道日期键的名称这样糟糕的设计:无论如何,如果您使用
Object.keys()
捕获键(不管值是多少),那么您就有了可以迭代的东西。如果结构保持不变,您可以使用键索引收集
,使用下一个键获取第二个值,使用第三个键(名称)获取名称。如果值为0,则将替换为“”,因为它是falsy:)谢谢dude,我更喜欢alex方法。你很棒