Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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_Substring - Fatal编程技术网

Javascript 子字符串索引问题

Javascript 子字符串索引问题,javascript,substring,Javascript,Substring,此kata的说明: 在这个Kata中,我们将检查字符串是否包含英文字母表中出现的连续字母,以及每个字母是否只出现一次 似乎我的代码在每次函数调用时对字符串进行不同的索引。例如,在第一个测试“abcd”中,起始索引显示为0,这是正确的,而在第二个测试“himjlk”中,起始索引显示为0 返回“g”,而不是“h” 本节的疑难解答 var length = orderedString.length; //startChar for string comparison var startChar

此kata的说明:

在这个Kata中,我们将检查字符串是否包含英文字母表中出现的连续字母,以及每个字母是否只出现一次

似乎我的代码在每次函数调用时对字符串进行不同的索引。例如,在第一个测试“abcd”中,起始索引显示为0,这是正确的,而在第二个测试“himjlk”中,起始索引显示为0

返回“g”,而不是“h”

本节的疑难解答

var length = orderedString.length;
  //startChar for string comparison
  var startChar = orderedString.charAt(0);
  //find index in aphabet of first character in orderedString.
  var startIndex = alphabet.indexOf(startChar);
  //create substring of alphabet with start index of orderedString and //orderedString.length
  var subString = alphabet.substring(startIndex, length);
函数求解{
//要检查的字母字符串
常量字母=`abcdefghijklmnopqrstuvwxyz`;
//对照字母表检查字母
//空数组以排序输入字符串
有序var=[];
//反复阅读字母表,对照字母s进行检查
//并将输入字符串按字母顺序重新排序
for(字母表中的变量z){
var charToCheck=字母表[z];
对于(s中的var i){
if(charToCheck==s[i]){
已订购。推送(s[i]);
}
//如果长度相同,则断开循环
if(ordered.length==s.length){
打破
}
}
if(ordered.length==s.length){
打破
}
}
//将数组重新连接到字符串中
var orderedString=ordered.join(``);
//用于比较的未来字母表子字符串的长度
var length=orderedString.length;
//用于字符串比较的startChar
var startChar=orderedString.charAt(0);
//在orderedString中第一个字符的标签中查找索引。
var startIndex=字母表索引(startChar);
//创建字母表的子字符串,起始索引为orderedString和orderedString.length
var子字符串=字母表子字符串(startIndex,长度);
//如果两者匹配,则返回
返回子字符串==orderedString?true:false;
}
console.log(solve(“abdc”)//预期为“真”`

console.log(solve(“himjlk”);//应为'true`
问题是您使用的是substring()而不是substr()。虽然听起来很相似,但也有区别

对于substring,第二个参数并不像您预期的那样确定长度。它实际上是要停止的索引。 函数与字符串abcd的预期效果完全一致,因为在这种情况下,从索引0到结束索引的长度是相同的

函数求解{
常量字母=`abcdefghijklmnopqrstuvwxyz`;
有序var=[];
for(字母表中的变量z){
var charToCheck=字母表[z];
对于(s中的var i){
if(charToCheck==s[i]){
已订购。推送(s[i]);
}
如果(ordered.length==s.length){break;}
}
如果(ordered.length==s.length){break;}
}
var orderedString=ordered.join(``);
var length=orderedString.length;
var startChar=orderedString.charAt(0);
var startIndex=字母表索引(startChar);
var subString=字母表substr(起始索引,长度);
返回子字符串==orderedString?true:false;
}

console.log(solve(“himjlk”)您的方法也是正确的。我正在使用
sort()
charCodeAt
给出另一个解决方案。使用
includes()

功能检查(str){
让org=[…数组(26)].map((x,i)=>String.fromCharCode(i+97)).join(“”);
str=str.split(“”).sort((a,b)=>a.charCodeAt(0)-b.charCodeAt(0)).join(“”);
退货组织包括(str);
}
log(检查(“abdc”)//true
控制台日志(检查(“himjlk”)//真的

控制台日志(检查(“himjlkp”)//false
您能链接到kata吗?代码错误无法抵抗,第二个错误不应该解决false吗?himjlk不是按字母顺序排列的。我希望solve返回false。如果要检查字符是否按字母顺序排列并且字符不重复,可以执行以下操作:
[…新集([…s].sort())].join(“”)===s
@HBlackorby该函数只检查子字符串和orderedArray是否相同,并相应地返回true/false-而不是输入字符串是否已排序。@这就是它的作用,但该函数的全部要点是查看输入字符串是否按字母顺序排序。如果两个字符串匹配,则按字母顺序排列。如果不是,输入字符串不是按字母顺序排列的(根据他自己的函数描述),默认的
排序算法将按字母顺序排列字符<代码>str=str.split(“”).sort().join(“”)也可以。哈哈,谢谢你,对我来说有点高级,但到时候我会再看:)@DBN我觉得它不太高级。我已经在代码中添加了关于每个部分的详细解释。检查一下。这肯定会对你有帮助。
var length = orderedString.length;
  //startChar for string comparison
  var startChar = orderedString.charAt(0);
  //find index in aphabet of first character in orderedString.
  var startIndex = alphabet.indexOf(startChar);
  //create substring of alphabet with start index of orderedString and //orderedString.length
  var subString = alphabet.substring(startIndex, length);