如何使用 lodash 在 Json 文件的数组中仅获取具有特定 atribute 的对象

How to get only objects that have a certain atribute inside an array in a Json file using lodash?

本文关键字:获取 对象 atribute lodash 何使用 Json 数组 文件      更新时间:2023-09-26

Codepen: http://codepen.io/giorgiomartini/pen/jEvaxZ

我有这个 API:

http://private-5d90c-kevinhiller.apiary-mock.com/angular_challenge/horror_movies

其结构如下:

如您所见,有一个offers数组,它有一个provider_id,例如,我只想获取提供程序 2 中的电影。

  {
    "id": 140524,
    "title": "Dracula Untold",
    "poster": "https://images.justwatch.com/poster/298962/s332",
    "full_path": "https://www.justwatch.com/us/movie/dracula-year-zero",
    "object_type": "movie",
    "original_release_year": 2014,
    "offers": [
    {
    "monetization_type": "buy",
    "provider_id": 2,
    "retail_price": 14.99,
    "currency": "USD",
    "urls": {
    "standard_web": "https://itunes.apple.com/us/movie/dracula-untold/id921386678?uo=4"
    },
    "presentation_type": "hd"
    },
    {
    "monetization_type": "buy",
    "provider_id": 2,
    "retail_price": 14.99,
    "currency": "USD",
    "urls": {
    "standard_web": "https://itunes.apple.com/us/movie/dracula-untold/id921386678?uo=4"
    },
    "presentation_type": "sd"
    },
...

例如,如何仅获得具有provider_id 2的电影?

谢谢。

var all = yourArrayOfObjects;
var onlyWant = _.filter(yourArrayOfObjects, function(item) {
    return _.any(item.offers, function(offer) {
        return offer.provider_id === 2;
    });
}

试试这个

var data = _.chain(data)
    .map(function(el) {
        el.offers = _.chain(el.offers)
            .uniq('provider_id')
            .filter(function(offer) {
                return offer.provider_id === 2;
            })
            .value();
        return el;
    })
    .filter(function(el) {
        return el.offers && el.offers.length;
    })
    .value();