如何使用下划线或lodash从JSON字符串中获取嵌套对象 [英] How to get nested objects from JSON string using underscore or lodash

查看:136
本文介绍了如何使用下划线或lodash从JSON字符串中获取嵌套对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚介绍了underscore.js / lodash,并发现它是一个操作JSON对象的强大工具。但是我的理解目前有限,需要对这个JSON对象提供一些帮助。



这是我的JSON对象



 {
driver:[
{
id:1,
name:Bob,
年龄:34,
汽车:[
{
make:BMW,
型号:3.20,
颜色:银,
里程:[
{
总计:350523,
年:[
{
2011:3535,
2012:7852,
2013​​:8045
}
],
月:[
{
12月:966,
11月:546,
10月:7657
}
]
}
]
}
]
},
{
id:2,
name:Rob,
年龄:22,
汽车:[
{
make:Peugeot,
model:306,
颜色:蓝色,
里程:[
{
总计:125635,
年:[
{
2011:3276,
2012:2445,
2013​​:4566
}
],
月:[
{
12月:966,
11月:546,
10月:157
}
]
}
]
}
]
},
{
id:3,
name:June,
age:19,
car: [
{
make:Mazda,
model:3,
color:Red,
里程: [
{
total:550523,
year:[
{
2011:8456,
2012:9552,
2013​​:10633
}
],
月:[
{
12月:625,
11月:2656,
10月:1332
}
]
}
]
}
]
}
]
}





我想为特定的司机提取汽车。我可以根据此代码获取驱动器



  var  selectDriver = _.filter(data.driver,{id: 3 }); 





但是为了获得这个驱动程序的汽车问题,我得到了未定义的属性。我错过了什么,或者我的以下代码做错了



  var  driverCar = _.chain(selectDriver)
.flatten(selectDriver)
.pluck(selectDriver, car
.map( function (car){
return {
make:make,
model:car.model,
color:car.colour
}
})
.value( );





感谢您的帮助!

解决方案

尝试

  var  search = _.filter(_。keys(data),function(key){
var obj = data [key];
return _.every(查询, function(val,queryKey){
return ref (obj,queryKey)=== val ;
});
});


这是一种方法。我用普通的JS完成了大部分工作。仅使用下划线的展平方法。



函数getCarFor(driverId){
var cars = data.driver.filter(function(driverObject){
return driverObject.id === driverId;
} )
.map(函数(驱动程序){
return driver.car.map(function(car){
返回 {
make:driver.car [ 0 ]。make,
model:driver。 car [ 0 ]。型号,
颜色:driver.car [ 0 ]。color
};
});
});
return _.flatten(cars)[ 0 ]; // 假设您想要第一辆车
}

< span class =code-keyword> var car1 = getCarFor( 1
console.log(car1);


I have just got introduced to underscore.js/lodash and finding it a power tool to manipulating JSON objects. However my understanding is limited at the moment and need to some help with this JSON object.

This is my JSON object

{
    "driver": [
        {
            "id": 1,
            "name": "Bob",
            "age": "34",
            "car": [
                {
                    "make": "BMW",
                    "model": "3.20",
                    "colour": "Silver",
                    "mileage": [
                        {
                            "total": "350523",
                            "year": [
                                {
                                    "2011": "3535",
                                    "2012": "7852",
                                    "2013": "8045"
                                }
                            ],
                            "month": [
                                {
                                    "december": "966",
                                    "november": "546",
                                    "october": "7657"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "id": 2,
            "name": "Rob",
            "age": "22",
            "car": [
                {
                    "make": "Peugeot",
                    "model": "306",
                    "colour": "Blue",
                    "mileage": [
                        {
                            "total": "125635",
                            "year": [
                                {
                                    "2011": "3276",
                                    "2012": "2445",
                                    "2013": "4566"
                                }
                            ],
                            "month": [
                                {
                                    "december": "966",
                                    "november": "546",
                                    "october": "157"
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "id": 3,
            "name": "June",
            "age": "19",
            "car": [
                {
                    "make": "Mazda",
                    "model": "3",
                    "colour": "Red",
                    "mileage": [
                        {
                            "total": "550523",
                            "year": [
                                {
                                    "2011": "8456",
                                    "2012": "9552",
                                    "2013": "10633"
                                }
                            ],
                            "month": [
                                {
                                    "december": "625",
                                    "november": "2656",
                                    "october": "1332"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    ]
}



I want to extract a car for a particular driver. I can get the drive based on this code

var selectDriver = _.filter(data.driver, {id: 3});



But having issues with getting the car for this driver, I get undefined properties. What am I missing, or doing wrong with my following code

var driverCar = _.chain(selectDriver)
           .flatten(selectDriver)
           .pluck(selectDriver, "car")
           .map(function(car){
               return {
                   make : make,
                   model: car.model,
                   colour : car.colour
               }
           })
           .value();



Thanks for the help!

解决方案

Try

var search = _.filter(_.keys(data), function (key) {
    var obj = data[key];
    return _.every(query, function (val, queryKey) {
        return ref(obj, queryKey) === val;
    });
});


Here's one way to do it. I got it most of the way with plain JS. Only used underscore's flatten method.

function getCarFor(driverId) {
  var cars = data.driver.filter(function(driverObject) {
    return driverObject.id === driverId;
  })
  .map(function(driver){
    return driver.car.map(function(car){
      return {
         make: driver.car[0].make,
         model: driver.car[0].model,
         colour: driver.car[0].colour
      };
    });
  });
  return _.flatten(cars)[0];  // assuming you want the first car
}

var car1 = getCarFor(1)
console.log(car1);


这篇关于如何使用下划线或lodash从JSON字符串中获取嵌套对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆