Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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 第一个索引无法填充正确的次数_Javascript - Fatal编程技术网

Javascript 第一个索引无法填充正确的次数

Javascript 第一个索引无法填充正确的次数,javascript,Javascript,我会先说,这绝对不是最枯燥的代码。我试图通过使用星号*返回一个字符串,该字符串显示每个字母在字符串中出现的次数。我的逻辑似乎适用于所有字母,除了字符串中的第一个字母。我一辈子都不知道为什么。有什么想法吗 let newCity = city.toLowerCase().split(''); console.log(newCity); let newArr = []; let duplicate = ''; let invis = ''; for

我会先说,这绝对不是最枯燥的代码。我试图通过使用星号*返回一个字符串,该字符串显示每个字母在字符串中出现的次数。我的逻辑似乎适用于所有字母,除了字符串中的第一个字母。我一辈子都不知道为什么。有什么想法吗

    let newCity = city.toLowerCase().split('');
    console.log(newCity);
    let newArr = [];
    let duplicate = '';
    let invis = '';

    for (let i = 0; i < newCity.length; i++) {
        if (
            newArr.indexOf(newCity[i]) === -1 &&
            newArr.indexOf(newCity[i] + ':*') === -1 &&
            newArr.indexOf(newCity[i] + ':**') === -1 &&
            newArr.indexOf(newCity[i] + ':***') === -1 &&
            newArr.indexOf(newCity[i] + ':****') === -1 &&
            newArr.indexOf(newCity[i] + ':*****') === -1 &&
            newArr.indexOf(newCity[i] + ':******') === -1 &&
            newArr.indexOf(newCity[i] + ':*******') === -1 &&
            newArr.indexOf(newCity[i] + ':********') === -1 &&
            newArr.indexOf(newCity[i] + ':*********') === -1 &&
            newArr.indexOf(newCity[i] + ':**********') === -1 &&
            newArr.indexOf(newCity[i] + ':***********') === -1
        ) {
            newArr.push(newCity[i] + ':*');
        } else if (newArr.indexOf(newCity[i] + ':**') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':**');
            newArr[duplicate] = newCity[i] + ':***';
        } else if (newArr.indexOf(newCity[i] + ':***') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':***');
            newArr[duplicate] = newCity[i] + ':****';
        } else if (newArr.indexOf(newCity[i] + ':****') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':****');
            newArr[duplicate] = newCity[i] + ':*****';
        } else if (newArr.indexOf(newCity[i] + ':*****') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':*****');
            newArr[duplicate] = newCity[i] + ':******';
        } else if (newArr.indexOf(newCity[i] + ':******') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':******');
            newArr[duplicate] = newCity[i] + ':*******';
        } else if (newArr.indexOf(newCity[i] + ':*******') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':*******');
            newArr[duplicate] = newCity[i] + ':********';
        } else if (newArr.indexOf(newCity[i] + ':********') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':********');
            newArr[duplicate] = newCity[i] + ':*********';
        } else if (newArr.indexOf(newCity[i] + ':*********') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':*********');
            newArr[duplicate] = newCity[i] + ':**********';
        } else if (newArr.indexOf(newCity[i] + ':**********') > 0) {
            duplicate = newArr.indexOf(newCity[i] + ':**********');
            newArr[duplicate] = newCity[i] + ':***********';
        } else {
            duplicate = newArr.indexOf(newCity[i] + ':*');
            newArr[duplicate] = newCity[i] + ':**';
        }
    }
    if (newArr.indexOf(' :*') > 0) {
        invis = newArr.indexOf(' :*');
        newArr.splice(invis, 1);
    }
    let newVal = newArr.join();
    console.log(newVal); 
}`

我猜这是因为第一个字母的indexOf==0,并且您总是检查indexOf是否大于0。
您缺少第一个位置。

我想这是因为第一个字母的indexOf==0,并且您总是检查indexOf是否大于0。
您缺少第一个位置。

正如@Astor建议的那样,您缺少第一个索引

但请考虑更容易阅读的短代码。

函数计数{ 让charCount={}; //拆分并迭代字符 city.toLowerCase.split.forEachchar=>{ //将字符数指定给对象 ifcharCount[char]{ 字符数[字符]++ }否则{ 字符数[char]=1 } }; return Object.keyscharCount.map char=>{ //连接字符和astrix计数 返回`${char}:${'*'.repeatcharCount[char]}` }; } res=countCharsNew-York.join; console.logres;
正如@Astor所说,您缺少第一个索引

但请考虑更容易阅读的短代码。

函数计数{ 让charCount={}; //拆分并迭代字符 city.toLowerCase.split.forEachchar=>{ //将字符数指定给对象 ifcharCount[char]{ 字符数[字符]++ }否则{ 字符数[char]=1 } }; return Object.keyscharCount.map char=>{ //连接字符和astrix计数 返回`${char}:${'*'.repeatcharCount[char]}` }; } res=countCharsNew-York.join; console.logres;
这里有另一种方法,与@CWB的方法类似,但在如何工作方面,它的功能性更强一些,是reduce而不是forEach

我还继续在中添加了一个string.toLowerCase,因为计数将基于其最初定义的大小写,这似乎与要点背道而驰

const city='测试字符串'; 常量charCounter=string,fillChar='*'=> Object.entries//将创建的对象转换为[key,value]对 //规范化案例,将其拆分为多个部分,并减少为对象中的计数 string.toLowerCase.split.ReduceGroup,字母=>{ 组[字母]=组[字母]| | 0+1; 返回组 }, {} //将[key,value]对映射为请求格式 .map[字母、数字]=> `${letter}:${'*'.repeatnumber}` .连接“,”;//把这些碎片连在一起 休息室
logcharCounter'New Orleans','-'这里有另一种方法,类似于@CWB的方法,但在如何工作方面,它的功能更为强大,是reduce而不是forEach

我还继续在中添加了一个string.toLowerCase,因为计数将基于其最初定义的大小写,这似乎与要点背道而驰

const city='测试字符串'; 常量charCounter=string,fillChar='*'=> Object.entries//将创建的对象转换为[key,value]对 //规范化案例,将其拆分为多个部分,并减少为对象中的计数 string.toLowerCase.split.ReduceGroup,字母=>{ 组[字母]=组[字母]| | 0+1; 返回组 }, {} //将[key,value]对映射为请求格式 .map[字母、数字]=> `${letter}:${'*'.repeatnumber}` .连接“,”;//把这些碎片连在一起 休息室 控制台.logcharCounter'NewOrleans','-'