我有一个简单的 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个函数
- 对于用户传递给脚本的每个类别(前面,本例中的其他),检查任何子类别中是否至少有一个值是
true
,如果是,则停止执行循环以避免无用的性能使用。 - 遍历所有子类别没有父项并检查至少一个值是否为
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/