我想检查一个数组是否只包含 对象。所以我创建了这个函数:
function arrayContainsObjOnly(arr){
return arr.join("").replace(/\[object Object\]/g, "") === "";
}
以下是您将如何使用它:
// return true
arrayContainsObjOnly([
{"name" : "juan", "age" : 28},
{"name" : "pedro", "age" : 25}
]);
// return false
arrayContainsObjOnly([
{"name" : "juan", "age" : 28},
"name=pedro;age=25"
]);
有没有更干净的方法呢?使用文字"[object Object]"
进行检查是否安全?
我也更喜欢非jQuery解决方案。
答案 0 :(得分:1)
概念上更简单,更清晰,但代码更少:
function arrContainsObjOnly(arr) {
return arr.every(function(el) {
return Object.prototype.toString.call(el) === '[object Object]';
});
}
<强>更新强>
第二个想法,这个变体会更好,因为它会在遇到第一个非对象时返回false
:
function arrContainsObjOnly(arr) {
return !arr.some(function(el) {
return Object.prototype.toString.call(el) !== '[object Object]';
});
}
答案 1 :(得分:0)
您可以使用 typeof 运算符
尝试这个
// CASE 1 :
var arrItem = [
{"name" : "juan", "age" : 28},
{"name" : "pedro", "age" : 25},
"name=pedro,age=25"
]
var boolIsAllContainObject = arrItem.every(function(oneItem,key){
if ((typeof oneItem) === "object") {
return true;
} else {
return false;
}
});
console.log(boolIsAllContainObject) //return false as one element is not object
// CASE 2:
var arrItem = [
{"name" : "juan", "age" : 28},
{"name" : "pedro", "age" : 25},
{"name" : "name=pedro,age=25"}
]
var boolIsAllContainObject = arrItem.every(function(oneItem,key){
if ((typeof oneItem) === "object") {
return true;
} else {
return false;
}
});
console.log(boolIsAllContainObject) //return true allelement are object