在第一个数组元素中的第二个数组元素中查找字母

时间:2017-04-16 05:14:14

标签: javascript

使用javascript,我想检查第一个数组元素中的字符串是否包含第二个数组元素的所有字母。如果是这样,返回true。例如。 [" Mary"," Aarmy"] =>真正; ["你好","嘿"] =>假的。

我尝试过以下代码,适用于[" Mary"," Aarmy"]和[" voodoo","没有"],但不适用于["你好","嘿"]。感谢任何帮助,谢谢!

function mutation(arr){
var str1 = arr.pop().toLowerCase();
 var str2 = arr.pop().toLowerCase();
 for(var i = 0; i < str2.length; i++){
  if(str1.indexOf(str2[i]) !== -1){
    return true;
  }
    else return false;
 }
} 

6 个答案:

答案 0 :(得分:4)

使用pop()时,它会返回数组中的最后一个元素,而不是第一个元素。

此外,您的if else位于for内并且有一个return语句。这不会让for循环完全运行并在第一个循环之后返回。

&#13;
&#13;
function mutation(arr){
 var str2 = arr.pop().toLowerCase();
 var str1 = arr.pop().toLowerCase();
 console.log("str1: " + str1);
 console.log("str2: " + str2);
 for(var i = 0; i < str2.length; i++){
  if(str1.indexOf(str2[i]) === -1){
    return false;
  }
 }
 return true;
}

arr = ["hello", "hey"];
console.log(mutation(arr));

arr = ["Mary", "Aarmy"];
console.log(mutation(arr));
&#13;
&#13;
&#13;

答案 1 :(得分:3)

考虑到您可以使用Setlodash,这是另一种解决方案:

const _ = require("lodash");

function mutation(arr) {

  var set1 = new Set(arr.pop().toLowerCase().split(''));
  var set2 = new Set(arr.pop().toLowerCase().split(''));

  return _.isEqual(set1, set2);

}

console.log(mutation(["Mary", "Aarmy"])); //true
console.log(mutation(["hello", "hey"])); //false
console.log(mutation(["voodoo", "no"])); //false

检查工作样本:https://jsfiddle.net/sayan751/3q8rtqy3/

答案 2 :(得分:1)

拆分并排序以加快速度 - 现在每套只有一次比较

&#13;
&#13;
var arr = ["Mary", "Aarmy","hello", "hey", "voodoo", "no"]

function mutation(){
  var str1 = arr.pop().toLowerCase().split("").sort().join("");
  var str2 = arr.pop().toLowerCase().split("").sort().join("");
  return str1.indexOf(str2) !=-1;
} 
while (arr.length) console.log(arr[arr.length-2],mutation())
&#13;
&#13;
&#13;

答案 3 :(得分:1)

递归,仅适用于运动。如果你处理long(> 100 char)字符串,这是有风险的,因为它依赖于堆栈空间。

const contains = function (a, b) {
  if (!b) return true;
  return a.indexOf(b[0]) !== -1 && contains(a, b.substring(1));
}

console.log(contains('mary', 'army')); // true
console.log(contains('hello', 'hey')); // false

答案 4 :(得分:0)

函数如何返回多个值;)(第6行)如果第二个数组的数组长度为3,则只检查第一个数组3个元素。 (第4行)

答案 5 :(得分:0)

function mutation(arr) {

  var set1 = arr[0].toLowerCase();
  var set2 = arr[1].split('');

  return set2.every(function(element, index, array){
      if(set1.indexOf(element.toLowerCase()) != -1)
        return true;
    else
        return false;
  });

}

console.log(mutation(["Mary", "Aarmy"]));   //return true
console.log(mutation(["hello", "hey"]));    //return false
console.log(mutation( ["voodoo", "no"]));   //return false
console.log(mutation( ["voodoo", "vo"]));   //return true