2015-07-09 81 views
0

我试图找出在自由编码阵营这一个挑战,规定如下:比较第一串第二串字符数组

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

我知道如何做到这一点,如果第二个字符串中有一个字符,或者如果第一个字符串包含了在完全相同的序列中的第二个字符串(如“你好”,“HEL”,而不是“你好”, “2009东海生日贺”)。但我还不能确定解决这一挑战的正确方法。

这里是我的代码...

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; 
    } 

} 

其中有字符的不同序列的任何组合的计算结果为假。

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

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

+0

['charAt()'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/charAt) –

+0

您想使用'.indexOf'代替'搜索' – Bergi

+0

@Bergi是的,我认为是。我使用for循环来创建类似这样的内容..... string1.indexOf(string2.charAt([i]))。你怎么看? –

回答

1

感谢@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; 
} 

如果有人像我一样(JS初学者)遇到这一任务,并认为这一解决方案,这里有一些显着的资源来通读,如果你不知道这里所用的方法不..

+0

@Bergi您是否有意删除**。toString()**?如果是这样,那么Dev Tools会将此返回为false。函数中传递的参数是数组元素如果是这样,那么我的坏 - >'突变(''hello','hel']);' –

0

你也这样做:

/** 
* 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 
0

我突变

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; 
} 
0

同样可以做到用地图:

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; 
} 
0

function mutation(arr) { 
 
    var src=arr[0].toLowerCase(); 
 
    var dist=arr[1].toLowerCase(); 
 
    for(var i=0;i<dist.length;i++){ 
 
    if(src.indexOf(dist[i])<0) return false; 
 
    } 
 
    return true; 
 
} 
 

 
console.log(mutation(["voonoo", "no"]))

+1

虽然这段代码可能会回答这个问题,提供关于如何解决问题和/或为什么解决问题的附加背景可以提高答案的长期价值。 –