数组元素替换

var id = [
    "574417bc79df540065d92df7",
    "574424e5df0eea0063adefc6",
    "57442329a3413100625f194f",
    "5744242bc4c971005d5ff04e",
    "574a841d1532bc006068c6c9",
    "574a97fe2b51e90056e423c0"
];

把这个数组转成

[
    "**********************f*",
    "**********************c*",
    "**********************4*",
    "**********************4*",
    "**********************c*",
    "**********************c*"
]

用什么办法才是最简便的?

阅读 6k
9 个回答

首先既然是把一个数组转成另一个数组,当然应该用map比较合适,其次涉及到字符串替换,可以用replace

id.map(function(str) {
    return str.replace(/[a- z0-9]/, function(match, pos) {
        return pos === str.length - 2 ? match : '*';
    });
});
id.map(item => {
    return `**********************${item[item.length - 2]}*`
})
var id = [
    "574417bc79df540065d92df7",
    "574424e5df0eea0063adefc6",
    "57442329a3413100625f194f",
    "5744242bc4c971005d5ff04e",
    "574a841d1532bc006068c6c9",
    "574a97fe2b51e90056e423c0"
];

for (var i = id.length - 1; i >= 0; i--) {
    var substr = '';
    for(var j = id[i].length - 2; j > 0; j--){
        substr += '*';
    }
    id[i] = substr + id[i][id[i].length -2] + '*';
}
console.log(id);

我只能写到这样了。

很显然,正则啊,授人以鱼不如授人以渔。

可以用用map方法

   var id = [
       "574417bc79df540065d92df7",
       "574424e5df0eea0063adefc6",
       "57442329a3413100625f194f",
       "5744242bc4c971005d5ff04e",
       "574a841d1532bc006068c6c9",
       "574a97fe2b51e90056e423c0"
   ];
   var res = id.map(function (str) {
       return process(str)
   })
   console.log(res);
   function process(str) {
       var value = "";
       var length = str.length
       for (var i = 0; i <= length; i++) {
           if (i == str.length - 1) {
               value += str.charAt(length - 2);
           }
           else value += "*";
       }
       return value
   }
 var id = [
        "574417bc79df540065d92df7",
        "574424e5df0eea0063adefc6",
        "57442329a3413100625f194f",
        "5744242bc4c971005d5ff04e",
        "574a841d1532bc006068c6c9",
        "574a97fe2b51e90056e423c0"
    ];
    for (var i = 0; i < id.length; i++) {
        var cur = "";
        for (var j = 0; j < id[i].length; j++) {
            if (j != (id[i].length - 2)) {
                cur+="*"
            }else {
                cur+=id[i][j];
            }
        }
        id[i]=cur;
    }
    console.log(id);

ES2015对字符串的扩展方法很简单啊:

id.map(val => "*".repeat(val.length - 3) + val.slice(-2, -1) + "*")

好像真的有点长,求教怎么用正则处理更好:

var id = [
    '574417bc79df540065d92df7',
    '574424e5df0eea0063adefc6',
    '57442329a3413100625f194f',
    '5744242bc4c971005d5ff04e',
    '574a841d1532bc006068c6c9',
    '574a97fe2b51e90056e423c0'
];

var arr = id.map(item => item.substring(0, item.length - 2) + '*' + item.substring(item.length - 1));

console.log(arr);
//[ '574417bc79df540065d92d*7',
// '574424e5df0eea0063adef*6',
// '57442329a3413100625f19*f',
// '5744242bc4c971005d5ff0*e',
// '574a841d1532bc006068c6*9',
// '574a97fe2b51e90056e423*0' ]
id.map(function(item,index){
    return item.replace(/\w/g,function(a,b,c){
        if(b==c.length-2)return a; 
        return '*'
    })
});
或
id.map(function(item,index){
    return item.replace(/^(\w+)(\w)\w$/,function(all,item1,item2){
        return item1.replace(/\w/g,'*')+item2+"*";
    })
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题