在JS中要判断一个值是否在数组中并没有函数直接使用,如PHP中就有in_array()这个函数。但我们可以写一个类似in_array()函数来判断是一个值否在函数中。
/**
* JS判断一个值是否存在数组中
*/
// 定义一个判断函数
var in_array = function(arr){
// 判断参数是不是数组
var isArr = arr && console.log(
typeof arr==='object' ? arr.constructor===Array ? arr.length ? arr.length===1 ? arr[0]:arr.j
在JavaScript中,没有内置函数可以直接用来判断一个值是否存在于数组中,这与PHP中的`in_array()`函数不同。为了实现类似的功能,我们可以自定义一个`in_array`函数。以下是对这个自定义`in_array`函数的详细解释:
我们需要定义一个函数`in_array`,它接受一个参数`arr`,即我们要检查的数组。在这个函数中,我们首先要验证传入的参数`arr`是否是一个数组。我们通过以下方式检查:
```javascript
var isArr = arr &&
(typeof arr === 'object') &&
(arr.constructor === Array) &&
(arr.length !== undefined) &&
((arr.length === 1) ? arr[0] : arr.join(',')) === 'an empty array';
```
这里,我们使用了多个条件来确保`arr`是一个非空数组。`typeof arr === 'object'`检查`arr`是否为对象,接着`arr.constructor === Array`确认它是否为数组类型。`arr.length !== undefined`确保数组有长度属性,最后`((arr.length === 1) ? arr[0] : arr.join(',')) === 'an empty array'`用来区分数组是否为空。如果数组只有一个元素,它会将该元素返回;否则,返回元素组成的字符串。
如果`arr`不是一个数组,函数会抛出一个异常,提示"arguments is not Array":
```javascript
if (!isArr) {
throw "arguments is not Array";
}
```
接下来,我们使用一个`for`循环遍历数组,比较当前元素`this`(在上下文中,指调用`in_array`的值)是否等于数组中的某个元素:
```javascript
for (var i = 0, k = arr.length; i < k; i++) {
if (this === arr[i]) {
return true;
}
}
```
如果找到匹配的元素,函数会立即返回`true`。如果没有找到,则在循环结束后返回`false`:
```javascript
return false;
```
为了方便使用,我们还可以扩展`String`和`Number`原型,让它们拥有`in_array`方法:
```javascript
String.prototype.in_array = in_array;
Number.prototype.in_array = in_array;
```
这样,我们就可以直接对字符串和数字调用`in_array`方法,例如:
```javascript
var arr = ['blue', 'red', '110', '120'];
var str = 'red';
var isInArray = str.in_array(arr);
alert(isInArray); // true
var num = 119;
var isInArray = num.in_array(arr);
alert(isInArray); // false
```
当传入的参数不是数组时,如`null`,`in_array`函数会抛出一个异常,提示"arguments is not Array"。因此,在使用此函数时,确保传入的是有效的数组至关重要。
通过这样的自定义`in_array`函数,我们可以在JavaScript中模拟PHP的`in_array`功能,方便地判断一个值是否存在于数组中。然而,JavaScript的`Array.prototype.includes`方法(ES6引入)已经提供了同样的功能,使用起来更为简洁,例如:
```javascript
var arr = ['blue', 'red', '110', '120'];
var str = 'red';
var isInArray = arr.includes(str); // true
var num = 119;
var isInArray = arr.includes(num); // false
```
因此,除非需要兼容不支持`includes`的老版本浏览器,否则直接使用`Array.prototype.includes`会更推荐。