У меня есть массив в боковом массиве с другим ключом, я хочу получить конкретный массив, используя определенный ключ со стороны HTML в угловых 6 - PullRequest
0 голосов
/ 26 июня 2018
sqlArray = [
  {
    module_idn: [
      {
        "K": "0",
        "V": "ABC"
      },
      {
        "K": "1",
        "V": "XYZ"
      }
    ]
  }
]

это мой массив, я хочу получить данные по определенному ключу

<select class="form-control select" name="{{fl?.table_field}}" [value]="fl?.default_value" [(ngModel)]="fl.default_value">
    <option *ngFor="let dynamic of sqlArray[fl.table_field]" value="{{dynamic.k}}">{{dynamic.v}}</option>
</select>

в HTML fl.table_field имеет то же имя ключа, т.е. "module_idn".

Как получить определенный массив для отображения, а в ключе sqlArray значение ключа может быть кратным.

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вам необходимо выполнить рекурсивный поиск дочерних структур.Вы можете выполнить рекурсивный поиск по n уровням, используя такую ​​функцию

  findObjects(obj, targetProp) {
    let finalResults = [];

    function getObject(theObject) {
      let result = null;
      if (theObject instanceof Array) {
        for (let i = 0; i < theObject.length; i++) {
          getObject(theObject[i]);
        }
      }
      else {
        for (let prop in theObject) {
          if (theObject.hasOwnProperty(prop)){
            if (prop === targetProp) {
              finalResults.push(theObject);
            }
            if (theObject[prop] instanceof Object || theObject[prop] instanceof Array){
              getObject(theObject[prop]);
            }
          }
        }
      }
    }

    getObject(obj);
    return finalResults;
  }

Чтобы получить список ключей для «K», вы должны вызвать его следующим образом, и он вернет массив.

this.findObjects(this.sqlArray, "K");

или в вашем ngFor как

*ngFor="let dynamic of findObjects(sqlArray, 'K')"
0 голосов
/ 26 июня 2018

Вложенные ngFor должны делать свое дело. Однако вы можете захотеть сгладить эту структуру данных или извлечь интересную часть или, наконец, извлечь целые компоненты для обработки каждой вещи (тогда вам потребуется сначала ngFor, чтобы «нарезать» основной массив, и каждый вложенный массив будет передан другому компоненту.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...