операторы rxjs в угловых - PullRequest
0 голосов
/ 28 октября 2018

Есть ли оператор для достижения того, что пытается сделать следующее map?

this.http.get(this.url)
         .pipe(map(data => {
             let results: object[] = new Array();
             data.forEach(function(d) {
                 let result = d['a'];
                 result['new_index'] = d['b'];
                 results.push(result);
             }
             retrun results;
         }));

d['a'] - это объект, а d['b'] - это строка.Клавиша new_index является новой для каждого result.

В основном исходные данные содержат довольно много полей, из которых мне нужны только 2 поля, одно из которых является фактическими данными типа объекта, а другоеID как поле.Мне не нужны никакие другие поля.И мне нужно извлечь данные этого объекта и вставить поле идентификатора в этот объект.

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Вы можете использовать оператор map из Rxjs вместе с методом map в массиве, чтобы сделать это:

Ваша реализация может быть упрощена следующим образом:

this.http.get(this.url)
  .pipe(
    map((data: any[]) => data.map(
      (datum: any) => ({ 
        ...datum.a,
        new_index: datum.b
      })
    ))
  );
0 голосов
/ 28 октября 2018

Я немного не понимаю Вашу структуру данных.

Если http.get возвращает данные вроде:

[{
  a: {...},
  b: '...'
}]

, тогда Вы можете просто использовать:

this.http.get(this.url)
  .pipe(map(({a, b}) => {
    a.new_index = b;
    return a;
  }));

Пример jsfiddle ;

Но если Ваши данные действительно что-то вроде:

[
  [{a: {...}, b: '...'}],
  [{a: {...}, b: '...'}],
]

(как Вы обрабатываете в своем примере), значит, Вы можете использовать [].map:

this.http.get(this.url)
 .pipe(map(data =>
    data.map(({a, b}) => {
      a.new_index = b;
      return a;
    })
 ));

jsfiddle пример ;

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