Javascript中数组的每个元素的toString()

时间:2015-01-12 05:08:13

标签: javascript arrays indexof

我想查找一个元素(可能是字符串或数字)是否在数组中。数组为test,元素为value。到目前为止,我有这个代码:

function compare(value, test) {
  // We need to stringify all the values to compare them with a string
  return test.map(function(value){
    return value.toString();
    }).indexOf(value) > -1;
  }
alert(compare("2", [1, 2, 3]));
alert(compare("2", ["1", "2", "3"]));

It does work 即可。然而,由于indexOf() uses strict equality不符合我的需要,它看起来很复杂。 hacky 方式将执行以下操作,这也有效:

return test.join("|").split("|").indexOf(value) > -1;

但是很容易看出,如果测试是["a", "b|c", "d"],那么我们就会遇到问题,因为我们要比较abc& d代替ab|cd。找不到安全字符也不是一个选项,因此该解决方案无效。 使用正常平等进行indexOf()是否有更简单的方法?

编辑:我的第一次尝试是这样做的,它从严格的平等中意外地返回了错误,这就是为什么我以复杂的方式做到了:

["1", "2", "3"].indexOf(2);

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作吗?

function compare(value, test) {
  return test.indexOf(Number(value)) > -1 || 
        test.indexOf(String(value)) > -1;
}
alert(compare("2", [1, 2, 3]));
alert(compare("2", ["1", "2", "3"]));

另一种方法是使用Array.prototype.some

function compare(value, test) {
  var num = Number(value),
      str = String(value);

  return test.some(function(val) {
    return val === num || val === str;
  });
}
alert(compare("2", [1, 2, 3]));
alert(compare("2", ["1", "2", "3"]));