首页 > 解决方案 > 在地图的回调中访问地图的输出数组 - JS

问题描述

我有一个以下函数,它遍历数组并对与我想要填充的数组相关的项目进行一些工作,如下所示:

function fileNaming(names) {
    const result = [];

    names.forEach(name => {
        let count = 0;
        const curr = name;

        if (result.includes(name)) {
            while (result.includes(name)) {
                count++;
                name = `${curr}(${count})`;
            }
        }
        result.push(name);
    })

    return result;
}

我想摆脱result数组并像这样只使用地图:

function fileNaming(names) {
    return names.map(name => {
        let count = 0;
        const curr = name;
        // In the following 2 lines we will get error because we don't have result array anymore
        if (result.includes(name)) {
            while (result.includes(name)) {
                count++;
                name = `${curr}(${count})`;
            }
        }
        return name;
    })
}

但问题是我需要检查输出数组中的某些内容,但我不知道该怎么做。我试图找到类似的问题,但没有找到任何东西,我也尝试在 map 方法的 pollifils 中进行挖掘,但到处都是一个带有一些result我可以访问的数组的循环。

标签: javascriptarrays

解决方案


或者,您可以使用reduce&filter

function fileNamingDup(names) {
  return names.reduce((acc, curr) => {
    if (acc.includes(curr)) {
      acc.push(`${curr}(${acc.filter(elem=>elem===curr).length+1})`)
    } else {
      acc.push(curr);
    }
    return acc;
  }, []);
}
console.log(fileNamingDup(['a', 'b', 'a', 'a']));


推荐阅读