Javascript 更改lodash贴图()中的起始位置
我需要从索引Javascript 更改lodash贴图()中的起始位置,javascript,arrays,lodash,Javascript,Arrays,Lodash,我需要从索引1开始映射数组,而不是从0开始。我怎样才能用它来做这件事?以下是我目前掌握的情况: function getStoryCard(value, key) { return { imageSection: storyCardMedia[OVERVIEW_DRAWERS_CONSTANTS.STORYCARD + key], linkOut: value.Link || null, subTitle: value.Subtitle |
1
开始映射数组,而不是从0
开始。我怎样才能用它来做这件事?以下是我目前掌握的情况:
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;
函数getStoryCard(值、键){
返回{
imageSection:storyCardMedia[概述\u抽屉\u常量.STORYCARD+密钥],
linkOut:value.Link | | null,
subTitle:value.subTitle | | null,
title:value.title | | null,
viewMore:value.viewMore?getViewMore(value.viewMore):null,
类型:故事卡片类型
}
}
//此方法获取一个对象数组
//[对象,对象…]
故事卡=\ u.map(pickedCards,getStoryCard);
//将索引设置为1,但映射方法已执行
因为(var i=1;i正在向您传递索引-它仅在您传入对象时提供键,并且由于您传入的是数组,所以您是实心的
但是,与过滤器
不同,映射
总是在返回的数组中插入一个值,即使该值类似于未定义的
(如果您决定在索引0处返回)。因此,您最终会得到类似[未定义的
,{},{},{}的结果。这不好
解决此问题的一种方法是使用另一种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));
我们迭代选择卡片,接受我们想要插入的卡片。我们不想插入的卡片在数组中变成了未定义的卡片,而压缩的卡片将随后被移除。希望这有帮助!正在向您传递索引-它只在您传递对象时提供键,因为您传递的是i在数组中,你是实心的
但是,与过滤器
不同,映射
总是在返回的数组中插入一个值,即使该值类似于未定义的
(如果您决定在索引0处返回)。因此,您最终会得到类似[未定义的
,{},{},{}的结果。这不好
解决此问题的一种方法是使用另一种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));
我们反复遍历挑选的卡片,接受我们想要插入的卡片。我们不想插入的卡片在数组中变成了未定义的卡片,而压缩后的卡片将被删除。希望这有帮助!在调用map之前使用数组中的slice函数 我相信这是我脑子里想出来的
arr.slice(1)
将给您数组减去第一个条目。在调用map之前使用数组中的slice函数 我相信这是我脑子里想出来的
arr.slice(1)
将为您提供减去第一个条目的数组。为什么不使用
为什么不使用
为什么需要从1开始?
。map
是一个1对1的函数。是否需要。filter
?为什么需要从1开始?。map
是一个1对1的函数。是否需要。filter
?