Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/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,我目前正试图完成一个有趣的代码挑战。下面是一个场景 写入函数加扰(str1,str2),如果str1字符的一部分可以重新排列以匹配str2,则返回true,否则返回false 例如: str1是'rkqodlw'和str2是'world'输出应返回true str1是'cedewaraaossoqyt'和str2是'codewars'应返回真 str1是'katas'和str2是'steak'应该返回false 我编写的函数可以工作,但执行所有可能的测试需要很长时间。如何使我的功能更有效?提前谢

我目前正试图完成一个有趣的代码挑战。下面是一个场景

写入
函数加扰(str1,str2)
,如果
str1
字符的一部分可以重新排列以匹配
str2
,则返回
true
,否则返回
false

例如:
str1
'rkqodlw'
str2
'world'
输出应返回
true

str1
'cedewaraaossoqyt'
str2
'codewars'
应返回

str1
'katas'
str2
'steak'
应该返回
false

我编写的函数可以工作,但执行所有可能的测试需要很长时间。如何使我的功能更有效?提前谢谢

以下是我编写的函数:

function scramble(str1, str2) {
  for (var i = 0; i < str1.length; i++) {
    str2 = str2.replace(str1.charAt(i),'');
  }
  return str2.length == 0 ? true : false;
}
功能加扰(str1、str2){
对于(变量i=0;i
我现在将尝试编写代码,但也许另一种方法可以产生有趣的结果。 基本上我的想法是:

  • 创建一个空对象
  • 开始循环遍历str2:获取当前字母,是新创建的字母吗 对象具有名为“当前字母”的属性,增加 属性,或者将属性“current”添加到该项中 字母“带值1
  • 现在,对于对象的每个属性,计算str1中的字母是否 至少与属性值的出现次数相同
代码如下:

let lettersCounter = new Object();
for (let i = 0; i < str2.length; i++) {
    if (typeof lettersCounter[str2[i]] !== 'undefined'){
        lettersCounter[str2[i]] ++;
    } else {
        lettersCounter[str2[i]] = 1;
    }
}
let props = Object.keys(lettersCounter);
for (let i = 0; i < props.length; i ++){
    let currLetter = props[i];
    if ((str1.split(currLetter).length) <= lettersCounter[currLetter] ){
        return false;
    }
}
return true;
让lettersconter=新对象();
for(设i=0;i如果((str1.split(currLetter).length)你说“太长”是什么意思?
scramble(“piosdjfpasoidjfkoawmesfjatkjdsngfayksndglkjysngdlkjantokgsdannkgjmaoriewjgaeoirnerijgaeirgwoef”,“hello”)
在我的机器上花费0.06毫秒
返回str2.length==0?true:false;
可以重写
返回!str2.length;
(var i=0;i
可以在
中针对(var i=0,j=str1.length;i
但除此之外……在通过61个测试后,由于“需要超过12000ms才能完成”,它会出错。
return!str2.length;
没有帮助。
return!str2.length;没有帮助。