算法封装函数

新手上路,请多包涵
  let arr = ['ab','ab','ac','a','a','a']    //封装一个函数传入arr

   let relst=['ab1','ab2','ac1','a1','a2','a3'] //输出
阅读 2.7k
6 个回答

使用一个变量作为计数器即可:

let arr = ['ab', 'ab', 'ac', 'a', 'a', 'a'];

function fn(arr) {
    let count = {}; // 对每一项进行计数

    return arr.map(item => {
        count[item] = parseInt(count[item] || 0) + 1;
        return item + count[item];
    });
}

fn(arr); // ["ab1", "ab2", "ac1", "a1", "a2", "a3"]

可以放在一个map里,map用来计数,循环的时候先在map里查询是第几次出现。如果map里没有,就是第一次,否则map次数+1

这也叫算法?

let data = ['ab','ab','ac','a','a','a']
demo(data) // => ['ab1','ab2','ac1','a1','a2','a3']

function demo (arr) {
  let res = [], map = arr.reduce((obj, key) => {
    obj[key] = (obj[key] || 0) + 1
    return obj
  }, {})
  
  for(let key in map) {
    for(let a=0; a < map[key]; a++) {
      res.push(`${key}${a+1}`)
    }
  }

  return res
}
        let arr = ['ab', 'ab', 'ac', 'a', 'a', 'a']
        function relst(arr) {
            let b = {}
            arr.forEach(item => {
                if (b[item]) {
                    b[item]++
                } else {
                    b[item] = 1
                }
            })
            let c = []
            for (let [key, value] of Object.entries(b)) {
                for (let i = 1; i < value + 1; i++) {
                    c.push(key + i)
                }
            }
            return c
        }
        relst(arr)
function reduce(arr) {
    var ret = [];
    if (Array.isArray(arr)) {
        for (var num, i = 0; i < arr.length; ++i) {
            num = arr[i] === arr[i - 1] ? ++num : 1;
            ret.push(arr[i] + num);
        }
    }
    return ret;
}
console.log(reduce(arr));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题