使用indexOf()比较Array中的字符

时间:2015-11-18 09:59:54

标签: javascript

  function mutation(arr) {

  var tester = arr[1].split('');

  for (var i = 0; i < tester.length; i ++) {
    if (!arr[0].indexOf(tester[i])) return false;
  }
  return true;
  }

  mutation(["hello", "hey"]);

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

我没有看到这个代码有任何问题,但只有90%的测试通过,我不知道为什么。我无法在那里看到一种模式 - 我应该遇到什么样的条件才能通过测试。

3 个答案:

答案 0 :(得分:8)

  

indexOf()方法返回调用String中的索引   第一次出现指定值的对象,开始   在fromIndex搜索。如果找不到值,则返回-1。

如果找不到值,则

String.prototype.indexOf()会返回-1,这就是您的语句不起作用的原因。

更改为:

if (arr[0].indexOf(tester[i]) < 0) return false;

答案 1 :(得分:3)

这不会起作用,因为你将第一个位置(0位置)归类为不可接受。

只有当0也有效时,您的条件才会适用于不大于0的值。

因此,对其进行更改,使其仅对小于0的值返回false

更改此行:

if (!arr[0].indexOf(tester[i])) return false;

要:

if (arr[0].indexOf(tester[i]) < 0) return false;

答案 2 :(得分:1)

事情真的很明显 - Upper / LowerCase()问题。这现在有效:

function mutation(arr) {

 arr[0] = arr[0].toLowerCase();
 arr[1] = arr[1].toLowerCase();
 var tester = arr[1].split('');
 for (var i = 0; i < tester.length; i ++) {
   if (arr[0].indexOf(tester[i]) == -1) return false;
 }
  return true;
}

mutation(["hello", "hey"]);

当然,我没有发现明显的0位置问题:

if (arr[0].indexOf(tester[i]) == -1) return false;

^这是正确的。

谢谢大家!