Я застрял с возвратом значения с помощью 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);
}
}
Но тогда console.info также должен возвращать undefined. И даже если я определю это «return 1», результат будет «undefined».
если ваше условие не соответствует, то оно не попадет внутрь if, вы можете попробовать с debugger.
Нет, проблема не в этом. Проверил это с помощью отладчика. И Условие выполнено. Похоже, Typescript нарушает возврат.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я знаю, что на этот вопрос уже дан ответ, но у меня есть одно решение.
.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
Надеюсь, это поможет вам.
Привет, Брэндон. Спасибо за это решение. Меня устраивает
Супер! Всегда рад помочь.
Похоже, 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;
}
да, потому что вы проверяете условие с помощью
element.attrs.collection_id === targetи внутри, если вы возвращаете какой-то index. Если условие не соответствует по умолчанию, возврат будет неопределенным.map(). Вместо этого используйтеfilter()