如何检查对象中的值是否为原始值?

问题描述 投票:2回答:2

所以基本上我想检查我的数据(JSON格式)是否具有原始值。因此,让我们举一个例子:我得到的数据看起来像这样:{name:Artikel,value:{“ ArtNr”:1234}},我想检查1234是否为原始数据。我还想区分结果是否是其中包含基本体的数组或对象。有可能吗?

function isObjectContainingPrimitiveValues(test) {
        let values = Object.values(test);
        for (let i of values) {
            console.log(i);
            return (typeof i === 'string' || typeof i === 'number' || typeof i === 'boolean' || typeof i === null || typeof i === undefined);
        }
    }

UPDATE

因此,在MaxK的强大帮助下,我建立了一个isResultContainingPrimitiveValues()函数,该函数检查我的数据中是否有Primitive / Primitive Arrays和or Objects。以下部分至少在我的理解中是最棘手的。以下示例有望帮助您更好地理解我的问题。

因此,我的let namesSplit = treeNode.name.split('.');变量将其获取的数据拆分为nameSplit : Artikel,Artnr。接下来,我定义了一个键变量let key = namesSplit[0];,其结果为key : Artikel。比我定义一个contextEntry变量let contextEntry = exprData.contextEntry.find(_x => _x.name === key);,结果为contextEntry : {"name":"Artikel","value":{"ArtNr":123}}。现在我要检查:如果还有另一个namesSplit.length > 1拆分,请检查isResultContainingPrimitiveValues()。如果它是原始的,则抛出错误,如果它是一个对象->从中获取值,并且如果它是一个数组->从那里获取值形式。我知道很多,但从所有令人困惑的东西中,我似乎并不清楚,因此,我感谢我所能提供的一切帮助。

javascript typescript types primitive
2个回答
1
投票

数组和对象类型都返回一个'typeof''object'。因此您可以检查一个对象而不是检查多个条件。所以return语句将是:return (typeof i === 'object')。在上面的语句中,数字,字符串,未定义,空值都将返回false。


1
投票

您将在第一次迭代中从函数中返回。仅当发现非基本元素时才应返回false,并且如果能够遍历所有值,则可以返回true,因为所有值都是基本元素:

function isObjectContainingPrimitiveValues(testObj) {
  let values = Object.values(testObj);
  for(let i of values){
     if (typeof i === 'object') {
       return false;
     }
  }
  return true;
};

更新:

阅读您的评论后,我更改了代码以检查带有基本元素的数组。这个想法是创建一个新的函数,该函数只检查单个值是否是原始值。现在,如果我们找到一个数组,我们可以简单地在帮助下进行检查-数组中的某些功能-如果数组中的某些元素不是基本元素。如果是,则返回false,否则我们将执行与以前相同的检查:

function isObjectContainingPrimitiveValues(testObj) {
  let values = Object.values(testObj);
  for (let i of values) {
    if (Array.isArray(i)) {
      if (i.some(val => !isPrimitive(val)))
        return false;
    } else {
      if (!isPrimitive(i))
        return false;
    }
  }
  return true;
};

function isPrimitive(test) {
  return typeof test !== 'object'
}
© www.soinside.com 2019 - 2024. All rights reserved.