手头的任务;
如果数组的第一个元素中的字符串包含,则返回true 数组第二个元素中字符串的所有字母。
例如,['hello','Hello']应该返回true,因为所有的 第二个字符串中的字母出现在第一个字母中,忽略大小写。
参数['hello','hey']应该返回false,因为字符串 '你好'不包含'y'。
最后,['Alien','line']应该返回true,因为所有的 '''中的字母出现在'异形'中。
我尝试的解决方案无效;
function mutation(arr) {
if (arr[0].toLowerCase().indexOf(arr[1].toLowerCase()) >= 0){
return true;
}else{
return false;
}
return arr;
}
mutation(['hello', 'hey']);
有人可以向我解释为什么它不起作用。我不是只想解释一个答案,以便我能更好地理解。
非常感谢
答案 0 :(得分:0)
试试这个:
$('#id').click(function() {
var arr = ['hello','hey'];
var isExist = false;
for (i = 0;i < arr[1].length; i++) {
if(arr[0].toLowerCase().indexOf(arr[1][i].toLowerCase()) >= 0)
isExist = true;
else {
isExist = false;
break;
}
}
if (isExist)
alert('true'); // In case of all chars of 2nd present in 1st arr
});
答案 1 :(得分:0)
根据您的输出,您必须使用数组第一个字符串检查数组第二个字符串的所有字符。为此,您必须检查第一个字符串中是否有可用的字符,而不是使用直接字符串。如果我们直接使用字符串,它将查找不是字符的总字符串。
尝试以下方法:
var arr = ['Alien', 'line'];
var arr1 = ['hello','hey'];
var arr2 = ['hello','Hello'];
function mutation(arr) {
var str1 = arr[0].toLowerCase();
var str2 = arr[1].toLowerCase();
var o = false;
for (var i=0;i<str2.length;i++) {
o = (str1.indexOf(str2[i]) !== -1);
if (!o) break;
}
return o;
}
console.log('first arr : ', mutation(arr));
console.log('second arr :', mutation(arr1));
console.log('third arr :', mutation(arr2));
答案 2 :(得分:0)
你正在做的是,你将第一个元素转换为小写,而不是试图在第一个数组中找到第二个元素。 您的解决方案适用于第一个元素中存在的整个第二个元素作为子字符串或两个元素完全相同的情况。 例如,它适用于以下示例
['你好','你好']
['你好','ell']
['你好','他']
但是当第二个字符串中的字母被洗牌时,它将无法工作。对于以下示例,您的解决方案将失败。
['Alien','line']
['你好','elo']
['你好','Hol']
如果整个第二个单词不存在,因为它在第一个单词中,您的解决方案将无效。
如果这有用,请告诉我。如果您需要,我会为您提供解决方案。
答案 3 :(得分:0)
这是我的工作代码。你可以检查一下。我们的想法是将数组中的两个字符串都转换为小写。然后我们将两个字符串比较。
我从较短的字符串中取出每一个字母,然后使用indexOf函数检查它是否在较长的字符串中。每次匹配时,valule no1或no2都会增加。
如果no1或no2的值等于较短字符串的长度,则表示较短字符串中的所有字母都在较长字符串中。
function mutation(arr) {
// transfer both strings in the array to lower case
var val1 = arr[0].toLowerCase();
var val2 = arr[1].toLowerCase();
// check if val2 is shorter than val1
if(val1.length >= val2.length){
var no1 = 0;
// Check every if any letter in val2 is in val1
for(var i = 0; i < val2.length; i++){
if(val1.indexOf(val2[i]) != -1){
// plus 1 if there is a match
no1++;
}
}
// check if the value of no1 equals to length of val2
if(no1 == val2.length){
return true;
}else{
return false;
}
}else if(val2.length > val1.length){
var no2 = 0;
for(var j = 0; j < val1.length; j++){
if(val2.indexOf(val1[j]) != -1){
no2++;
}
}
if(no2 == val1.length){
return true;
}else{
return false;
}
}
}