Javascript 比较数组中的第二个字符串和第一个字符串

Javascript 比较数组中的第二个字符串和第一个字符串,javascript,arrays,string,Javascript,Arrays,String,我试图找出自由代码阵营面临的一个挑战,其中指出: 如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,则返回true 如果第二个字符串只有一个字符,或者第一个字符串的第二个字符串包含在完全相同的序列中(例如,“hello”、“Hell”而不是“hello”、“olleh”),我理解如何执行此操作。但我还不知道应对这一挑战的正确方法 这是我的密码 function mutation(arr) { var myArray = arr.splice(1).toString().toL

我试图找出自由代码阵营面临的一个挑战,其中指出:

如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,则返回true

如果第二个字符串只有一个字符,或者第一个字符串的第二个字符串包含在完全相同的序列中(例如,“hello”、“Hell”而不是“hello”、“olleh”),我理解如何执行此操作。但我还不知道应对这一挑战的正确方法

这是我的密码

function mutation(arr) {

 var myArray = arr.splice(1).toString().toLowerCase();
 var splicedArray = arr.toString().toLowerCase();

  if (splicedArray.search(myArray) != -1) {
    return true;
  } else {
    return false;
  }

}
任何具有不同字符序列的组合的计算结果都为false

 // e.g this is false
 mutation(['Alien', 'line'])

完成这项任务的正确方法是什么?

多亏了@Bergi,我找到了答案。他也很友好,允许我自己发布答案。这是

function mutation(arr) {

   var string2 = arr.splice(1).toString().toLowerCase();
   var string1 = arr.toString().toLowerCase();
  for(var i = 0; i < string2.length; i++) {
    if (string1.indexOf(string2.charAt(i)) == -1) {
      return false;
    }
  }
  return true;
}
功能突变(arr){
var string2=arr.splice(1.toString().toLowerCase();
var string1=arr.toString().toLowerCase();
对于(变量i=0;i
如果像我这样的人(JS初学者)遇到了这个任务并找到了这个解决方案,如果你不知道这里使用的方法,这里有一些值得注意的参考资料


    • 您也可以这样做:

      /**
       * Match function that operates on a data array with two elements, where the 
       * first element is the query and the second element is the searchable data.
       *
       * Returns true if the query string contains all of the letters of the searchable
       * data string.
       * 
       * @param  {Array} data - contains query and searchable string data
       * 
       * @return {Boolean} if a match occured
       */
      var match = function (data) {
          // Convert strings to arrays.
          var query = Array.prototype.slice.call(data[0]);
          var searchableData = Array.prototype.slice.call(data[1]);
      
          // Every query string character should occur in the searchable data.
          return query.every(function (search) {
      
              // Only some of the searchable data characters should occur in the query data.
              return searchableData.some(function (target) {
                  return search === target;
              });
          });
      };
      
      match([ 'abc', 'xyzadefbhijc' ]); // returns true
      match([ 'abq', 'xyzadefbhijc' ]); // returns false
      
      我的变异

      function mutation(arr) {
      
        var string2 = arr[1].toLowerCase();
        var string1 = arr[0].toLowerCase();
      
        for(var i = 0; i < string2.length; i++) {
          if (string1.indexOf(string2.charAt(i)) == -1) {
            return false;
          }
        }
        return true;
      }
      
      功能突变(arr){
      var string2=arr[1]。toLowerCase();
      var string1=arr[0]。toLowerCase();
      对于(变量i=0;i
      同样可以使用map:

      function mutation(arr) {
        var one = arr[0].toLowerCase();
        var two = arr[1].toLowerCase().split('');
        var match = true;
        two.map(function(val){
          if(one.indexOf(val) === -1){
            match = false;
          }
        });
        return match;
      }
      
      功能突变(arr){
      var src=arr[0].toLowerCase();
      var dist=arr[1]。toLowerCase();
      
      for(var i=0;i您想使用
      .indexOf
      而不是
      搜索
      @Bergi是的,我想是的。我正在使用for循环得出类似的结果…..string1.indexOf(string2.charAt([i])。您觉得怎么样?@RolandJegorov:听起来不错!(尽管
      string2.charAt(i)
      ,没有数组文字)@Bergi谢谢,我会尝试一下,然后再回来。最后,参与者中的某个人应该会得到公认的答案分数。:@Bergi你删除了吗。toString()故意?如果是,则开发工具将此返回为false。函数中传递的参数是数组元素,因此无法对每个字符进行比较。可能我对任务不清楚?如果是,则我的错误-->
      突变(['hello',hel'])
      虽然此代码可以回答问题,但提供有关如何和/或为什么解决问题的附加上下文将提高答案的长期价值。