Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在json树节点js中搜索_Javascript_Search - Fatal编程技术网

Javascript 在json树节点js中搜索

Javascript 在json树节点js中搜索,javascript,search,Javascript,Search,我有一个json对象。我需要找到yes=1的字符串,并获取有关它的信息(name,yes…)。如何在NodeJS中实现这一点 {"1": {"name":'alex', "yes":'1'}, "2": {"name":'andy', "yes":'0'}} 或者是否有任何方法可以在mysql这样的对象中进行搜索?如果您想要普通的javascript,下面应该也可以在node.js上使用 var testObj={ "1": { “姓名”:“alex”, “是”:“1

我有一个json对象。我需要找到yes=1的字符串,并获取有关它的信息(name,yes…)。如何在NodeJS中实现这一点

{"1": {"name":'alex',
      "yes":'1'},
"2": {"name":'andy',
      "yes":'0'}}

或者是否有任何方法可以在mysql这样的对象中进行搜索?

如果您想要普通的javascript,下面应该也可以在
node.js
上使用

var testObj={
"1": {
“姓名”:“alex”,
“是”:“1”
},
"2": {
“姓名”:“安迪”,
“是”:“0”
}, 
"3": {
“名称”:“bvvpp”,
“是”:“1”
}
};
函数covertCheckFunc(检查器){
返回函数convertChecker(目标){
var键;
用于(输入检查器){
如果(!target.hasOwnProperty(键)){
继续;
}
//单层
如果(目标[键]的类型)=“未定义”||
目标[键]!==检查器[键]){
返回false;
}
}
返回true;
}
}
//获取第一个匹配项。如果没有匹配项,则返回'null'。
函数getFirstMatch(checkObj、checker){
//将要匹配的对象转换为匹配函数。
if(Object.prototype.toString.call(checker)!='[Object Function]'){
checker=covertCheckFunc(checker);
}
var键;
for(输入checkObj){
如果(选中对象hasOwnProperty(键)和
检查人(检查对象[键]){
返回checkObj[key];
}
}
返回null;
}
//获取匹配项的数组。如果不匹配,则返回空数组。
函数getArrayMatch(checkObj,checker){
if(Object.prototype.toString.call(checker)!='[Object Function]'){
checker=covertCheckFunc(checker);
}
var keys=Object.keys(checkObj);
var arrayForm=keys.map(函数(键){
返回checkObj[key];
});
返回数组形式的过滤器(检查器);;
}
log(getFirstMatch(testObj,{“yes”:'1'}));

log(getArrayMatch(testObj,{“是”:“1'}))假设您只想检查同一级别的属性(即,没有您想要递归搜索的嵌套对象),您可以使用一个简单的
for in
循环并直接检查属性值

var obj = {
           "1": { 
                  "name":'alex',
                  "yes":'1'
                },
           "2": {
                  "name":'andy',
                  "yes":'0'
                }
          };

var results = {};

for (var key in obj) {
    if (obj.hasOwnProperty(key) && obj[key].yes === "1"){
        results[key] = obj[key];
    }
}

console.log(results); // {"1": { "name": "alex", "yes": "1" }}

另一个问题,你对结果有什么期望?你想得到第一个匹配条件的对象,还是想要一个匹配条件的对象数组?@fuyushimoya我想找到所有yes=1的对象,然后使用其“name”、“yes”和其他数据作为参数well@fuyushimoya返回包含两个项的数组。感谢这两种变体@Аааааа-а怪异,我只是复制粘贴到控制台中,似乎工作正常。您的输出是什么?我从文件和JSON.parse中获取对象@Ааааа-а然后唯一的变化是,您没有将
obj
绑定到对象文本,而是将其绑定到
JSON.parse
的返回值。类似于
var obj=JSON.parse(JSON_str)。如果您共享您的输出、错误和所有内容,它通常会有所帮助。我得到了{“numb”:{“name”:“alex”,“yes”:“1”}如何获得name和yes,如果我不知道“numb”(1或2…)?您已经失去了我。如果结果对象中有一个“numb”键,这意味着JSON中存在一个“numb”键,因此它确实是一个正确的搜索结果。您可以使用
obj.numb
obj[“numb”]
访问嵌套对象。也就是说,它没有数值;它是一根绳子。如果“numb”是您自己对某个数字的表示法,那么您可以使用另一个
for in
语句在result对象中循环键。