我需要从索引1
开始映射数组,而不是0
。如何使用map()执行此操作?这是我到目前为止所做的:
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 :(得分:2)
在调用map之前,使用数组上的切片函数。
我相信
arr.slice(1)
将为您提供减去第一个条目的数组。
答案 1 :(得分:2)
为什么不使用rest()?
storyCards = _.map(_.rest(pickedCards), getStoryCard);
答案 2 :(得分:1)
_.map 传递索引 - 它只在您传入对象时提供键,并且由于您传入的是数组,因此您是可靠的。
但是,与filter
不同,map
总是在返回的数组中插入一个值,即使该值类似于undefined
(如果您决定在索引0处返回)。因此,您最终会得到类似[undefined
,{},{},{}]的内容。不好。
您可以解决此问题的一种方法是使用另一种lodash方法compact
。 Compact简单地遍历数组,删除falsey值。您的上述代码示例将变为:
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
随后会删除它们。希望这有帮助!