首页 > 解决方案 > 如何检查对象中的值是否是原始值?

问题描述

所以基本上我想检查我的数据(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);
        }
    }

更新

因此,在 MaxK 的强大帮助下,我构建了一个isResultContainingPrimitiveValues()函数来检查我的数据中的原始/原始数组和/或对象。至少以我的理解,以下部分是最棘手的。以下示例有望帮助您更好地理解我的问题。

因此,我的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()。如果它是原始的,则抛出错误,如果它是一个对象 -> 从中获取值,如果它是一个数组 -> 从那里获取值。我知道这很多,但从所有令人困惑的东西中我似乎无法想清楚,所以我很感激我能得到的每一个帮助。

标签: javascripttypescripttypesprimitive

解决方案


您将在第一次迭代时从您的函数返回。仅当您找到非原始值并且能够遍历所有值时才应返回 false,因为所有值都是原始值:

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'
}

推荐阅读