当前位置: 首页 > 知识库问答 >
问题:

如何在JavaScript后端验证中间值的基础上访问外部most JSON对象值和内部most JSON对象值

怀浩大
2023-03-14

我有一个JSON数据,如下所示,其中的值应该基于验证中间值从内部和外部对象中取。

例如:如果cat=4,那么我应该创建一个对象,如下所示

"material_id": xcs2,
"cat": 4;
"title": "1ctrlX ",
"description": "1The single-axis ",
"link": "1example.com"

我设法提取了所有除了如何找到material_id?下面是我的代码

null

let data = [{
  "Products": {
    "xcs2": {
      "de_DE": {
        "cat": "45",
        "title": "deutsch - Umrichter",
        "description": "Die Einzelachs-Umrichter .",
        "link": "example.com"
      },
      "en_US": {
        "cat": "4",
        "title": "1ctrlX ",
        "description": "1The single-axis ",
        "link": "1example.com"
      }
    },

    "XCD1": {
      "de_DE": {
        "cat": "435",
        "title": "ctrlX ",
        "description": "Die ",
        "link": "example.com"
      },
      "en_US": {
        "cat": "4",
        "title": "2ctrlX ",
        "description": "2The single-axis ",
        "link": "2example.com"
      }
    }

  }
}]

var jsonobj = null;

data.filter(item => { // here data is divided into multiple array and executes iterateobject fun on each item
  iterateObject(item)
})


function iterateObject(obj) {
  for (prop in obj) { // prop is the key here (should have de_DE and object)

    if (typeof(obj[prop]) == "object") { //  obj[prop] is the  value.
      iterateObject(obj[prop])
    } else {
      if (prop == "cat" && obj[prop] == 4) { // prop is the key  (imagining id 04)
        //console.log('category id :' + obj.cat.toUpperCase())
        category_id = obj.cat
        title = obj.title
        description = obj.description
        link = obj.link

        jsonobj = {
          "category_id": category_id,
          "title": title,
          "description": description,
          "link": link
        }
        
        console.log(jsonobj)
      }
    }
  }
}

null

共有1个答案

景哲
2023-03-14

根据您最近的评论,我不确定您是否需要一种递归方法,但我已经将它保留了下来。在下面的代码中,想法是将所有父键传递给iterateObject的子调用,以便在构建结果对象时可以使用它们。

null

let data = [{"Products":{"xcs2":{"de_DE":{"cat":"45","title":"deutsch - Umrichter","description":"Die Einzelachs-Umrichter .","link":"example.com"},"en_US":{"cat":"4","title":"1ctrlX ","description":"1The single-axis ","link":"1example.com"}},"XCD1":{"de_DE":{"cat":"435","title":"ctrlX ","description":"Die ","link":"example.com"},"en_US":{"cat":"4","title":"2ctrlX ","description":"2The single-axis ","link":"2example.com"}}}}];

const get_found_object = ({ cat: category_id, title, description, link }, material_id) => ({
  material_id, category_id, title, description, link
});

function iterateObject(obj, parent_keys = []) {
  let result = null;
  
  for (prop in obj) { // prop is the key here (should have de_DE and object)
    if (typeof(obj[prop]) == "object") { //  obj[prop] is the  value.
      result = iterateObject(obj[prop], [prop, ...parent_keys]);
      if(result) return result;
    } else if (prop == "cat" && obj[prop] == 4) {
      return get_found_object(obj, parent_keys[1]);
    }
  }
  
  return null;
}

const result = data.reduce((acc, item) => acc || iterateObject(item), null);

console.log(result);
 类似资料:
  • 问题内容: 我有用户登录,并且我有2个错误处理程序 电子邮件和密码为空 电子邮件和密码与数据库不匹配 通过邮递员寄给我 用户名和密码为空,结果为 电子邮件和密码错误,结果是 我注意到第一个错误有对象错误,第二个没有 我的反应js代码是 如果我发送电子邮件和密码错误,我的问题是在此代码中 这行我有错误,这是我的控制台日志 我该如何处理此类错误? 问题答案: 查看您的请求处理代码和响应,我可以看到错误

  • 我当前的代码 结果存储在对象中,但我对如何提取对象内部的数据感到困惑。 假设我想从< code>resultQuery对象中提取account表中的< code>name列

  • 因此,我正在构建一种基于对象的模型方法,并试图将所有现有的jQuery转换为纯JavaScript调用,但我遇到了一些问题。 所以我有一个基本的基础: 由于某些原因,当使用jQuery调用时,它都运行得很好,但是当使用Document.QuerySelector调用JS替代项时,我会得到一个错误,如下所示: 谁能给我解释一下.find()调用和传统JS的主要区别是什么?

  • 问题内容: 我有一个stdclass对象,如下所示: 我遍历了多个此类对象,其中一些具有 我想知道如果在以“父母”作为其值的“文本”之后出现“值”对象,我将如何访问? 问题答案: 您要查找的是Object [‘values’] [0]:“ values”是键映射,就像“ text”一样,[0]是您要访问的数组内的索引。因此,如果您想将ID深入巢中,则必须执行以下操作 要么 这应该给您/ m / 0

  • 可能重复: 对象文字声明中的自引用 有没有办法在同一对象文本中访问属性名的值?类似这样的事情: