Javascript 如何使用node.js中的属性过滤Json数据

Javascript 如何使用node.js中的属性过滤Json数据,javascript,node.js,lodash,Javascript,Node.js,Lodash,我有一个JSON对象,看起来像 { "1F54716": [], "1258820b-guid": [ { "value": "true", "property": "", "say": "Hello", }, { "value": "false", "property": "", "sa

我有一个JSON对象,看起来像

{
    "1F54716": [],
    "1258820b-guid": [
        {
            "value": "true",
            "property": "",
            "say": "Hello",

        },
        {
            "value": "false",
            "property": "",
            "say": "Hello",

        }
    ],

}
有没有一种方法可以通过“value”来过滤这个值:“true”,所以只有value=true的值,然后我想要一个say==Hello的计数。非常感谢您的帮助,javascript世界的新手

您只需检查一下属性即可使用

var data={“1F54716”:[],“1258820b guid”:[{“value”:“true”,“property”:”,“say”:“Hello”,},{“value”:“false”,“property”:“say”:“Hello”,}],},
计数
//过滤所有属性
Object.keys(数据).forEach(函数(k){
数据[k]=数据[k]。过滤器(函数(a){
返回a.value==“true”;
});
});
//计数
计数=对象。键(数据)。减少(函数(r,k){
返回数据[k].reduce(函数(rr,a){
返回rr++(a.say==='Hello');
},r);
}, 0);
控制台日志(数据);
控制台日志(计数)类似于:

function filterObj(obj) {
  let res = {};
  let res.count = 0;
  // iterate through all keys in the object
  Object.keys(obj).forEach( k => {  
    // if this sub-object has 
    res[k] = obj[k].filter(o => {
    // if say = hello increment our counter by 1. Otherwise it stays the same
    res.count += o.say === 'hello' ? 1 : 0;
    // if the  object has value === true, keep it in our final results
    return o.value === "true";
   });
  );
  // res.count is the number of say === 'hello'
  // and res contains only objects with value === 'true' 
  return res;
}

应该有用。另一种解决方案是使用JSON解析对象,并仅使用o.value作为测试来保留它,这取决于您是打算继续在JS中处理此对象还是下一步将其序列化。

我建议使用underline.JS framework。它提供了多种方法将数据搜索到javascript数组中

    var obj =  {
"1F54716": [],
"1258820b-guid": [
    {
        "value": "true",
        "property": "",
        "say": "Hello",

    },
    {
        "value": "false",
        "property": "",
        "say": "Hello",

    }
],
}
var result = _.where(obj["1258820b-guid"], { value : "true"});

下面是供进一步阅读的内容。

请看,这不是JSON。[“1258820b guid”]实际上是一个guid,每次都会因不同的内容而改变。如何在此处使用泛型值?它是否有一个通用模式,或者是否需要筛选所有属性?我需要按所有属性筛选[“1258820b guid”]实际上是一个guid,每次都会因不同的内容而更改。如何在此处使用通用值?添加了一个函数,用于根据现有属性“value”和“say”检测和提取源数组。
var theObject = {"1F54716": [], "1258820b-guid": [
    {"value": "true", "property": "", "say": "Hello"},
    {"value": "false", "property": "", "say": "Hello"},
    {"value": "true", "property": "", "say": "Bye"},
    {"value": "true", "property": "", "say": "Hello"}
]}; // Array has 3 value "true" objects and 2 of them count as say "Hello".

function extractArrayWithValueAndSay(obj) {
    for (var k in obj) {
        if (obj[k] && obj[k].length && "value" in obj[k][0] && "say" in obj[k][0]) {
            return obj[k];
        }
    }
    return [];
}

var sourceArray = extractArrayWithValueAndSay(theObject);

var filteredValueTrueArray = sourceArray.filter(function (obj) {
    return obj && obj.value == "true";
});

var filteredSayHelloCount = filteredValueTrueArray.filter(function (obj) {
    return obj && obj.say == "Hello";
}).length;