在Javascript

时间:2015-07-14 03:53:20

标签: javascript arrays

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

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

2 个答案:

答案 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