定义用于测试的列表和对象
let list = ["pig", "dog", "cat"];
let obj = {
"name": "dog",
"age": 12,
"sex": "man"
};
方案一、in
in操作符针对的是key,而非value, 对于普通的一维数组来说,key是隐藏的
console.log(1 in list); // true
console.log('pig' in list); // false
console.log('name' in obj); // true
console.log('dog' in obj); // false
方案二、indexOf
indexOf是用于字符串和数组,不能用于对象
console.log(list.indexOf('dog')); // 1
console.log(list.indexOf('apple')); // -1
方案三、includes
同indexOf一样,includes仅能用于字符串和数组
console.log(list.includes('dog')); // true
console.log(list.includes('apple')); // false
方案四、自定义函数inArray
数组检查value, 对象检查key
/**
* 自定义成员检查函数
* @param {List/Object} array
* @param {非引用类型} value
*/
function inArray(array, value) {
// 数组检查value
if (Array.isArray(array)) {
for (let index in array) {
if (array[index] == value) {
return true;
}
}
}
// 对象检查key
else {
for (let index in array) {
if (index == value) {
return true;
}
}
}
return false;
}
// 作用于数组
console.log(inArray(list, 'dog')); // true
console.log(inArray(list, 'apple')); // false
// 作用于对象
console.log(inArray(obj, 'name')); // true
console.log(inArray(obj, 'dog')); // false
Python中的in成员检查
检查的是key
lst = ["pig", "dog", "cat"]
obj = {
"name": "dog",
"age": 12,
"sex": "man"
}
# 作用于数组
print('dog' in lst) # True
print('apple' in lst) # False
# 作用于对象
print('name' in obj) # True
print('dog' in obj) # False
参考
js如何判断数组含有某值,in/includes/inArray/indexOf方案对比