Javascript 在json树节点js中搜索
我有一个json对象。我需要找到yes=1的字符串,并获取有关它的信息(name,yes…)。如何在NodeJS中实现这一点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
{"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对象中循环键。