Angular 2 Array.map возвращает undefined

Я застрял с возвратом значения с помощью Array.map в Angular 2 Так что же мне здесь не хватает?

export class TabsPage {
    @ViewChild(SuperTabs) superTabs: SuperTabs;

    public rootTab: string = 'ProductListPage';
    public categories: Array<any>;
    public collection_id: number;
    public selectedindex: any;

    private getArrayIndex(source, target) {
        source.map((element, index) => {
            if (element.attrs.collection_id === target) {
                // Returns the Value i need
                console.info('i: ', index);
                return index;
            }
        });
    }

    constructor(
        public navCtrl: NavController,
        public navParams: NavParams,
        public shopifyClientProvider: ShopifyClientProvider,
        private superTabsCtrl: SuperTabsController,
    ) {
        this.categories = navParams.get('collections');
        this.collection_id = navParams.get('collection_id');
        this.selectedindex = this.getArrayIndex(this.categories, navParams.get('collection_id'));

        // Returns undefined
        console.info('Index ', this.selectedindex);
    }
}

да, потому что вы проверяете условие с помощью element.attrs.collection_id === target и внутри, если вы возвращаете какой-то index. Если условие не соответствует по умолчанию, возврат будет неопределенным. map(). Вместо этого используйте filter()

Narendra Jadhav 25.04.2018 15:06

Но тогда console.info также должен возвращать undefined. И даже если я определю это «return 1», результат будет «undefined».

magic.77 25.04.2018 15:08

если ваше условие не соответствует, то оно не попадет внутрь if, вы можете попробовать с debugger.

Narendra Jadhav 25.04.2018 15:10

Нет, проблема не в этом. Проверил это с помощью отладчика. И Условие выполнено. Похоже, Typescript нарушает возврат.

magic.77 25.04.2018 15:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
294
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я знаю, что на этот вопрос уже дан ответ, но у меня есть одно решение.

.ts file code

 private getArrayIndex(source, target) {
  let indx = -1;
  source.map((element, index) => {
    if (element.attrs.collection_id === target) {
      // Returns the Value i need
      console.info('i: ', index);
      indx = index;
    }
  });
  return indx;
}
Ответ принят как подходящий

Вы можете использовать findIndex (), чтобы сделать это довольно быстро:

Я не знаю точно, как выглядят ваши данные, но с учетом массива:

const target = 2;
const source = [
  {
    attrs: {
      collection_id: 1
    }
  },
  {
    attrs: {
      collection_id: 2
    }
  },
  {
    attrs: {
      collection_id: 3
    }
  },
];

const index = source.findIndex(element => element.attrs.collection_id === target);

вернет 1 для индекса. Если индекс не найден, будет возвращен -1.

Plunkr: https://plnkr.co/edit/5B0gnREzyz6IJ3W3

Надеюсь, это поможет вам.

Привет, Брэндон. Спасибо за это решение. Меня устраивает

magic.77 25.04.2018 15:53

Супер! Всегда рад помочь.

Brandon 25.04.2018 15:56

Похоже, Typescript нарушает возврат. С этой модификацией я получаю желаемое значение:

private getArrayIndex(source, target) {
    let found: number;
    source.map((element, index) => {
        if (element.attrs.collection_id === target) {
            console.info('i: ', index);
            found = index;
        }
    });
    return found;
}

Другие вопросы по теме