我创建了一个简单的函数,用于测试是否可以将2个字符串重新排列为相同的字符串-例如:
// tests
canRearrange('teset','testy'); // false
canRearrange('teste','teset'); // true
canRearrange('tes','set'); // true
为简便起见,我正在尝试在else节中确定最好,最简洁和最简洁的编写函数的方法。我尝试了以下方法:
// 1. requires var sameChars being defined first
var sameChars = ((c) => str1.includes(c) && str2.includes(c));
return str1.every(sameChars) && str2.every(sameChars);
// 2. works but is untidy
return str1.every(((c) => str1.includes(c) && str2.includes(c))) && str2.every(((c) => str1.includes(c) && str2.includes(c)));
// 3. fails presumably due to syntax error
return str1.every(sameChars) && str2.every(sameChars);
function sameChars((c) => str1.includes(c) && str2.includes(c));
所以从本质上讲,我正在尝试使#3(以上)工作,或者看看是否有更好的编写方法。如果函数“ sameChars”写在主代码下面,那么它大概仍然可以工作-我的主代码(它可以工作)如下:
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
} else {
return str1.every(sameChars) && str2.every(sameChars);
function sameChars(c){
return str1.includes(c) && str2.includes(c);
}
}
}
有人对如何改善它有任何想法吗?感谢您的帮助。
答案 0 :(得分:0)
// 3. fails presumably due to syntax error return str1.every(sameChars) && str2.every(sameChars); function sameChars((c) => str1.includes(c) && str2.includes(c));
标记为//3. fails presumably due to syntax error
的行实际上包含语法错误,如下面的可运行代码段所示。如评论中所指出的,您正在混合function declaration和arrow function的格式。箭头函数是function expression的简写语法。函数声明悬挂 1 ,而函数表达式则没有,这就是为什么“主代码”与函数声明一起使用的原因。
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
} else {
return str1.every(sameChars) && str2.every(sameChars);
function sameChars((c) => str1.includes(c) && str2.includes(c));
}
}
console.log(canRearrange('teset','testy')); // false
console.log(canRearrange('teste','teset')); // true
console.log(canRearrange('tes','set')); // true
在return
语句上方定义函数真的重要吗?不会依赖那种方式吊起...
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
}
const sameChars = c => str1.includes(c) && str2.includes(c);
return str1.every(sameChars) && str2.every(sameChars);
}
console.log(canRearrange('teset','testy')); // false
console.log(canRearrange('teste','teset')); // true
console.log(canRearrange('tes','set')); // true
如果不能忍受选项一,则可以使用函数声明格式,但可以全部使用一行。有人可能会认为这种方式不太可读。
return str1.every(sameChars) && str2.every(sameChars);
function sameChars(c) { return str1.includes(c) && str2.includes(c)};
function canRearrange(str1,str2) {
str1 = str1.split(''), str2 = str2.split('');
if (str1.length != str2.length) {
throw "Bad Input";
}
return str1.every(sameChars) && str2.every(sameChars);
function sameChars(c) { return str1.includes(c) && str2.includes(c)};
}
console.log(canRearrange('teset','testy')); // false
console.log(canRearrange('teste','teset')); // true
console.log(canRearrange('tes','set')); // true