繁体   English   中英

在json树节点js中搜索

[英]search in json tree node js

我有一个JSON对象。 我需要找到其中yes = 1的字符串,并获取有关它的信息(名称,是....)。 如何在Node JS中做到这一点?

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

还是有什么办法可以像mysql一样在对象中进行搜索?

如果您想要香草javascript,下面的代码也可以在node.js

 var testObj = { "1": { "name":'alex', "yes":'1' }, "2": { "name":'andy', "yes":'0' }, "3": { "name": 'bvvpp', "yes": '1' } }; function covertCheckFunc(checker) { return function convertChecker(target) { var key; for (key in checker) { if (!target.hasOwnProperty(key)) { continue; } // Single level if (typeof target[key] === 'undefined' || target[key] !== checker[key]) { return false; } } return true; } } // Get the first matched item. Return `null` if none match. function getFirstMatch(checkObj, checker) { // Convert a object to match to a match function. if (Object.prototype.toString.call(checker) !== '[object Function]') { checker = covertCheckFunc(checker); } var key; for (key in checkObj) { if (checkObj.hasOwnProperty(key) && checker(checkObj[key])) { return checkObj[key]; } } return null; } // Get array of matched item. Return empty array if none match. function getArrayMatch(checkObj, checker) { if (Object.prototype.toString.call(checker) !== '[object Function]') { checker = covertCheckFunc(checker); } var keys = Object.keys(checkObj); var arrayForm = keys.map(function(key) { return checkObj[key]; }); return arrayForm.filter(checker);; } console.log(getFirstMatch(testObj, {"yes": '1'})); console.log(getArrayMatch(testObj, {"yes": '1'})); 

如果你接受一些库像下划线lodash ,它可以更简单:

 var testObj = { "1": { "name":'alex', "yes":'1' }, "2": { "name":'andy', "yes":'0' }, "3": { "name": 'bvvpp', "yes": '1' } }; var condition = { "yes": '1' }; var firstMatch = _.findWhere(testObj, condition); var arrayMatch = _.filter(testObj, function(item) { return _.isMatch(item, condition); }); console.log(firstMatch); console.log(arrayMatch); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script> 

假设您只想检查相同级别的属性(即也没有要递归搜索的嵌套对象),则可以使用简单的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" }}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM