2015-06-06 2 views
1

Мне нужно отобразить массив, начиная с индекса 1, а не 0. Как это сделать, используя map()? Вот то, что я до сих пор:Изменить начальную позицию в карте lodash()

function getStoryCard(value, key) { 
    return { 
     imageSection: storyCardMedia[OVERVIEW_DRAWERS_CONSTANTS.STORYCARD + key], 
     linkOut: value.Link || null, 
     subTitle: value.Subtitle || null, 
     title: value.Title || null, 
     viewMore: value.ViewMore ? getViewMore(value.ViewMore) : null, 
     type: storyCardType 
    } 
} 

// This method gets an object array 
// [Object, Object....] 
storyCards = _.map(pickedCards, getStoryCard); 

// Set index to 1, but map method already has executed 
for (var i = 1; i <= storyCards.length; i++) { 

    if (storyCards.imageSection === undefined) { 
     storyCards.splice(0, 1); 
    } 

    storyCards[i]; 
} 

return storyCards; 
+0

Зачем вам нужно начинать с 1? '.map' - это функция от 1 до 1. –

+0

Не использовать карту? .. –

+0

вам нужен '.filter'? –

ответ

1

_.mapявляется мимо вас индекс - это обеспечивает только ключи, когда вы передаете в объекте, и так как вы передаете в массив, вы твердое тело.

Однако, в отличие от filter, map всегда вставляет значение в возвращаемом массиве, даже если это значение что-то вроде undefined (если вы решите вернуться в индекс 0). Таким образом, вы получите что-то вроде [undefined, {}, {}, {}]. Нехорошо.

Один из способов решения этого вопроса - использовать другой метод lodash, compact. Compact просто итерации через массив удаляет ложные значения. Ваш выше пример кода стал бы тогда:

function getStoryCard(value, index) { 
    imageSection = storyCardMedia[OVERVIEW_DRAWERS_CONSTANTS.STORYCARD + index]; 

    if (!imageSection || index === 0) return;  

    return { 
     imageSection: imageSection, 
     linkOut: value.Link || null, 
     subTitle: value.Subtitle || null, 
     title: value.Title || null, 
     viewMore: value.ViewMore ? getViewMore(value.ViewMore) : null, 
     type: storyCardType 
    } 
} 

return _.compact(_.map(pickedCards, getStoryCard)); 

Мы перебираем pickedCards, принимая те карты, которые мы хотим. Эти карты, которые мы не хотим вставлять, просто становятся undefined в массиве, которые впоследствии удалят compact. Надеюсь это поможет!

1

Используйте функцию среза, которая находится на массивах перед вызовом карты.

Off верхней части моей головы, я считаю,

arr.slice(1) 

даст вам массив минус первая запись.

2

Почему бы не использовать rest()?

storyCards = _.map(_.rest(pickedCards), getStoryCard); 
Смежные вопросы