javascript - 如何在 javascript 对象中正确搜索

标签 javascript object

我有一个简单的 CLI 应用程序,用户可以在其中指定将导入到他的项目中的所有单个对象的类别(类似于 lodash 自定义构建)

为了避免重复数据,我创建了一个对象结构,如:

{
    "front": {
        "subCategories": [{
            "name": "front1",
            "value": false
        }, {
            "name": "front2",
            "value": true
        }]
    },
    "other": {
        "subCategories": [{
            "name": "other1",
            "value": false
        }, {
            "name": "other2",
            "value": false
        }]
    }
}

从用户输入我得到

  • 类别名称,例如string front (但它也可以列出所有类别)
  • 或者对象名称数组,例如['front1', 'other2']

基于此输入,我必须弄清楚是否至少有一个值是 true。只是要注意的问题是不知道用户发送的是类别还是单个对象,我从输入解析器知道:)

所以我需要写2个函数

  1. 对于用户传递给脚本的每个类别(前面,本例中的其他),检查任何子类别中是否至少有一个值是 true,如果是,则停止执行循环以避免无用的性能使用。
  2. 遍历所有子类别没有父项并检查至少一个值是否为 true 其中名称来自输入的对象名称数组,例如['front1', 'other2']

我做了什么尝试:

我可以想象,如果我将 objValue=false; 设置为默认值,然后将 subCategories 对象传递给类似于下面循环内部的代码可能会起作用:

var objValue = _.result(_.find(myObj, function(obj) {
    return obj.name === name;
}), 'value');

在我调用它之前,我简单地询问if(objValue) {//code here}

然而,这像是最后一步,我一开始就不知何故迷路了。

如果这里有人可以引导我正确的方法如何:

  • 查找对象中是否有任何值设置为true
  • 如果有一个对象的值设置为 true
  • ,则在所有子类别中查找(它可以比 2 个更多)对象

最佳答案

给你,试试这个:

var data = {
    "front": {
        "subCategories": [{
            "name": "front1",
            "value": false
        }, {
            "name": "front2",
            "value": false
        }]
    },
    "other": {
        "subCategories": [{
            "name": "other1",
            "value": false
        }, {
            "name": "other2",
            "value": true
        }]
    }
}

function searchSubCategories(obj, subCats)
{
  var ret = false;
  for (var property in obj)
  {
      for (var i=0; i <obj[property].subCategories.length; i++){
        for (var x =0; x < subCats.length; x++)
        {
          ret = (obj[property].subCategories[i].name === subCats[x] && obj[property].subCategories[i].value === true);
          if (ret)
            break;
        }
        if (ret)
            break;
      }
    if (ret)
      break;
  }
  return ret;
 }

function searchCategory(obj, category){
  var ret = false;
  for (var i=0; i <obj[category].subCategories.length; i++)
  {
    ret = obj[category].subCategories[i].value;
    if (ret)
      break;
  }
  return ret;
}

console.log(searchSubCategories(data, ['front1', 'other2']));
console.log(searchCategory(data, 'other'));
console.log(searchCategory(data, 'front'));

关于javascript - 如何在 javascript 对象中正确搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38971698/

相关文章:

javascript - 如何对不同 DOM 元素的过渡元素使用 View Transition API (web)?

c - C 中的结构继承限制

C++ 对象设计问题 : efficiently and safely construct objects and save/load with database

javascript - LocalStorage、JavaScript 和对象

javascript - 游戏循环没有做它应该做的事情

javascript - JQuery 数据表响应扩展 : column class not retained for cells in expanded rows

javascript - 在 Django 中使用 SIMPLE javascript 确认删除

Java 控制台显示对象的地址而不是实际值

javascript - 如何检查 JavaScript 对象是否为 DOM 对象?

jquery - 如何从 Adob​​e Animate CC 2015 o0bject 中删除滚动条