检查数组中是否包含object-only-element



我想检查一个数组是否只包含对象。所以我创建了这个函数:

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的解决方案。

概念上更简单,更清晰,但代码并不少:

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]';
  });
}

可以使用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

最新更新