Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改lodash贴图()中的起始位置_Javascript_Arrays_Lodash - Fatal编程技术网

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