【问题标题】:filter Json array multi key过滤Json数组多键
【发布时间】:2021-06-29 09:43:50
【问题描述】:

我正在寻找一种解决方案,让我过滤我的 json,键状态 = 'p' 存在于租约数组中。我尝试使用此功能,但它对我不起作用:

myActiveContractItems.filter(( myActiveContractItem ) => myActiveContractItem.leases.map( lease => lease.status === LeaseStatus.Primary)) 

以下是我的 JSON:

{
  "results": [
    {
      "contract": {
        "id": 445134,
        "reference": "L|2190197",
        "label": "APREMIS",
        "status": null,
        "payment_mode": null,
        "address": {
          "street": "1 RUE DES ALPILLES",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80000",
          "city": "AMIENS"
        },
        "billing_address": {
          "street": "1 RUE DES ALPILLES",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80090",
          "city": "AMIENS"
        },
        "primary_bank_account": {
          "bank": "",
          "iban": "",
          "bic": "",
          "name_of_account_holder": "",
          "rib": "   ",
          "rum": "",
          "blz": null,
          "account_number": null
        },
        "dedicated_bank_account": {
          "bank": "",
          "iban": "",
          "bic": ""
        },
        "number": "2190197",
        "day_of_collection": 0,
        "direct_debit_start_date": "-0001-11-30",
        "validate": false,
        "balance": -629.64,
        "signed": true,
        "company": null,
        "contacts": [],
        "rent_components": []
      },
      "leases": [
        {
          "reference": null,
          "metering_service_data": null,
          "start_date": "2019-03-05",
          "end_date": "-0001-11-30",
          "presumed_end_date": "-0001-11-30",
          "signing_date": "2019-02-20",
          "expected_rent_deposit": 0,
          "actual_rent_deposit": 0,
          "rent_amount": 217.83,
          "vat": 0,
          "charge_amount": 96.99,
          "flat_category": "Logement",
          "flat_category_id": 291,
          "flat_type": "COLLECTIF TYPE 1BIS",
          "flat_type_id": 618,
          "cost_contribution": 0,
          "tenant_rank": 9,
          "status": "P",
          "end_inspection": null,
          "number_of_occupants": null,
          "move_in_date": null,
          "handover_date": null,
          "move_out_date": null,
          "id": 837057,
          "leaving_reason": null,
          "notice_period": null,
          "flat": {
            "id": 332705,
            "reference": "OP80|SUDE|41|70|AL01|A|2|MISLCAL108",
            "reference_label": "MISLCAL108",
            "label": "MISLCAL108",
            "flat_contact": [],
            "valid": {
              "from": "1975-12-01",
              "to": "-0001-11-30"
            },
            "address": {
              "street": "1 RUE DES ALPILLES",
              "label": null,
              "kind": "main",
              "country": "",
              "federal_state": "",
              "postal_code": "80090",
              "city": "AMIENS"
            },
            "unique_credit_identifier": null,
            "parent_reference": "OP80|SUDE|41|70|AL01|A|2",
            "legal_model_space": "",
            "useful_space": 0,
            "corrected_space": 0,
            "new_rent_amount": null,
            "rental_charge": null,
            "condition": "",
            "location": "108",
            "immovable_property_valuation": 0,
            "valuation_year": 0,
            "comment": null,
            "category": "Logement",
            "category_id": 291,
            "type": "COLLECTIF TYPE 1BIS",
            "type_id": 618,
            "real_space": 36,
            "living_space": 31,
            "unit_for_flat_space": null,
            "vacant": false,
            "vacant_from": null,
            "vacancy_reason": null,
            "construction_date": "-0001-11-30",
            "floor": null,
            "bk01": {
              "main_account_number": null,
              "property_account_number": null,
              "branch_account_number": null
            },
            "surface_for_hot_water_consumption": null,
            "metering_service_data": null
          },
          "contacts": []
        }
      ],
      "tenants": [],
      "insurances": [
        {
          "id": 334281,
          "name": "MAIF",
          "insurance_policy": "2388193 H",
          "reference": "",
          "home": "",
          "start_date": "2021-01-01",
          "end_date": "2021-12-31"
        }
      ]
    },
    {
      "contract": {
        "id": 445147,
        "reference": "L|2190211",
        "label": "APREMIS",
        "status": null,
        "payment_mode": null,
        "address": {
          "street": "4 ALLEE PIERRE ROLLIN",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80000",
          "city": "AMIENS"
        },
        "billing_address": {
          "street": "4 ALLEE PIERRE ROLLIN",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80090",
          "city": "AMIENS"
        },
        "primary_bank_account": {
          "bank": "",
          "iban": "",
          "bic": "",
          "name_of_account_holder": "",
          "rib": "   ",
          "rum": "",
          "blz": null,
          "account_number": null
        },
        "dedicated_bank_account": {
          "bank": "",
          "iban": "",
          "bic": ""
        },
        "number": "2190211",
        "day_of_collection": 0,
        "direct_debit_start_date": "-0001-11-30",
        "validate": false,
        "balance": -908.28,
        "signed": true,
        "company": null,
        "contacts": [],
        "rent_components": []
      },
      "leases": [
        {
          "reference": null,
          "metering_service_data": null,
          "start_date": "2019-03-06",
          "end_date": "-0001-11-30",
          "presumed_end_date": "-0001-11-30",
          "signing_date": "2019-02-26",
          "expected_rent_deposit": 0,
          "actual_rent_deposit": 0,
          "rent_amount": 331.66,
          "vat": 0,
          "charge_amount": 122.48,
          "flat_category": "Logement",
          "flat_category_id": 291,
          "flat_type": "COLLECTIF TYPE 2",
          "flat_type_id": 619,
          "cost_contribution": 0,
          "tenant_rank": 8,
          "status": "P",
          "end_inspection": null,
          "number_of_occupants": null,
          "move_in_date": null,
          "handover_date": null,
          "move_out_date": null,
          "id": 837473,
          "leaving_reason": null,
          "notice_period": null,
          "flat": {
            "id": 331154,
            "reference": "OP80|SUDE|52|89|RO02|C|0|PRBLCRO058",
            "reference_label": "PRBLCRO058",
            "label": "PRBLCRO058",
            "flat_contact": [],
            "valid": {
              "from": "1980-10-16",
              "to": "-0001-11-30"
            },
            "address": {
              "street": "4 ALLEE PIERRE ROLLIN",
              "label": null,
              "kind": "main",
              "country": "",
              "federal_state": "",
              "postal_code": "80090",
              "city": "AMIENS"
            },
            "unique_credit_identifier": null,
            "parent_reference": "OP80|SUDE|52|89|RO02|C|0",
            "legal_model_space": "",
            "useful_space": 0,
            "corrected_space": 0,
            "new_rent_amount": null,
            "rental_charge": null,
            "condition": "",
            "location": "58",
            "immovable_property_valuation": 0,
            "valuation_year": 0,
            "comment": null,
            "category": "Logement",
            "category_id": 291,
            "type": "COLLECTIF TYPE 2",
            "type_id": 619,
            "real_space": 54,
            "living_space": 54,
            "unit_for_flat_space": null,
            "vacant": false,
            "vacant_from": null,
            "vacancy_reason": null,
            "construction_date": "-0001-11-30",
            "floor": null,
            "bk01": {
              "main_account_number": null,
              "property_account_number": null,
              "branch_account_number": null
            },
            "surface_for_hot_water_consumption": null,
            "metering_service_data": null
          },
          "contacts": []
        }
      ],
      "tenants": [],
      "insurances": [
        {
          "id": 334294,
          "name": "MAIF",
          "insurance_policy": "2388193 H",
          "reference": "",
          "home": "",
          "start_date": "2021-01-01",
          "end_date": "2021-12-31"
        }
      ]
    },
    {
      "contract": {
        "id": 445170,
        "reference": "L|2190237",
        "label": "APREMIS",
        "status": null,
        "payment_mode": null,
        "address": {
          "street": "34 RUE DU 31 AOUT 1944",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80000",
          "city": "AMIENS"
        },
        "billing_address": {
          "street": "34 RUE DU 31 AOUT 1944",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80090",
          "city": "AMIENS"
        },
        "primary_bank_account": {
          "bank": "",
          "iban": "",
          "bic": "",
          "name_of_account_holder": "",
          "rib": "   ",
          "rum": "",
          "blz": null,
          "account_number": null
        },
        "dedicated_bank_account": {
          "bank": "",
          "iban": "",
          "bic": ""
        },
        "number": "2190237",
        "day_of_collection": 0,
        "direct_debit_start_date": "-0001-11-30",
        "validate": false,
        "balance": -834.2,
        "signed": true,
        "company": null,
        "contacts": [],
        "rent_components": []
      },
      "leases": [
        {
          "reference": null,
          "metering_service_data": null,
          "start_date": "2019-03-05",
          "end_date": "-0001-11-30",
          "presumed_end_date": "-0001-11-30",
          "signing_date": "2019-03-01",
          "expected_rent_deposit": 0,
          "actual_rent_deposit": 0,
          "rent_amount": 311.21,
          "vat": 0,
          "charge_amount": 105.89,
          "flat_category": "Logement",
          "flat_category_id": 291,
          "flat_type": "COLLECTIF TYPE 4",
          "flat_type_id": 621,
          "cost_contribution": 0,
          "tenant_rank": 9,
          "status": "P",
          "end_inspection": null,
          "number_of_occupants": null,
          "move_in_date": null,
          "handover_date": null,
          "move_out_date": null,
          "id": 826780,
          "leaving_reason": null,
          "notice_period": null,
          "flat": {
            "id": 299105,
            "reference": "OP80|CENT|7|8|AO34|A|4|318LCAO024",
            "reference_label": "318LCAO024",
            "label": "318LCAO024",
            "flat_contact": [],
            "valid": {
              "from": "1958-11-01",
              "to": "-0001-11-30"
            },
            "address": {
              "street": "34 RUE DU 31 AOUT 1944",
              "label": null,
              "kind": "main",
              "country": "",
              "federal_state": "",
              "postal_code": "80090",
              "city": "AMIENS"
            },
            "unique_credit_identifier": null,
            "parent_reference": "OP80|CENT|7|8|AO34|A|4",
            "legal_model_space": "",
            "useful_space": 0,
            "corrected_space": 0,
            "new_rent_amount": null,
            "rental_charge": null,
            "condition": "",
            "location": "24",
            "immovable_property_valuation": 0,
            "valuation_year": 0,
            "comment": null,
            "category": "Logement",
            "category_id": 291,
            "type": "COLLECTIF TYPE 4",
            "type_id": 621,
            "real_space": 55,
            "living_space": 55,
            "unit_for_flat_space": null,
            "vacant": false,
            "vacant_from": null,
            "vacancy_reason": null,
            "construction_date": "-0001-11-30",
            "floor": null,
            "bk01": {
              "main_account_number": null,
              "property_account_number": null,
              "branch_account_number": null
            },
            "surface_for_hot_water_consumption": null,
            "metering_service_data": null
          },
          "contacts": []
        }
      ],
      "tenants": [],
      "insurances": [
        {
          "id": 334319,
          "name": "AXA",
          "insurance_policy": "2659495304",
          "reference": "",
          "home": "",
          "start_date": "2021-01-01",
          "end_date": "2021-12-31"
        }
      ]
    },
    {
      "contract": {
        "id": 445240,
        "reference": "L|2190322",
        "label": "APREMIS",
        "status": null,
        "payment_mode": null,
        "address": {
          "street": "26 -34 RUE DE LA DODANE",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80000",
          "city": "AMIENS"
        },
        "billing_address": {
          "street": "26 -34 RUE DE LA DODANE",
          "label": null,
          "kind": "main",
          "country": "",
          "federal_state": "",
          "postal_code": "80000",
          "city": "AMIENS"
        },
        "primary_bank_account": {
          "bank": "",
          "iban": "",
          "bic": "",
          "name_of_account_holder": "",
          "rib": "   ",
          "rum": "",
          "blz": null,
          "account_number": null
        },
        "dedicated_bank_account": {
          "bank": "",
          "iban": "",
          "bic": ""
        },
        "number": "2190322",
        "day_of_collection": 0,
        "direct_debit_start_date": "-0001-11-30",
        "validate": false,
        "balance": -4489.57,
        "signed": true,
        "company": null,
        "contacts": [],
        "rent_components": []
      },
      "leases": [
        {
          "reference": null,
          "metering_service_data": null,
          "start_date": "2019-03-28",
          "end_date": "-0001-11-30",
          "presumed_end_date": "-0001-11-30",
          "signing_date": "2019-03-19",
          "expected_rent_deposit": 0,
          "actual_rent_deposit": 0,
          "rent_amount": 0,
          "vat": 0,
          "charge_amount": 0,
          "flat_category": "Foyer",
          "flat_category_id": 283,
          "flat_type": "COLLECTIF TYPE 1BIS",
          "flat_type_id": 618,
          "cost_contribution": 0,
          "tenant_rank": 1,
          "status": "S",
          "end_inspection": null,
          "number_of_occupants": null,
          "move_in_date": null,
          "handover_date": null,
          "move_out_date": null,
          "id": 840484,
          "leaving_reason": null,
          "notice_period": null,
          "flat": {
            "id": 301118,
            "reference": "OP80|CENT|89|149|DO26|A|1|DODDEDO012",
            "reference_label": "DODDEDO012",
            "label": "DODDEDO012",
            "flat_contact": [],
            "valid": {
              "from": "1993-08-01",
              "to": "-0001-11-30"
            },
            "address": {
              "street": "26 -34 RUE DE LA DODANE",
              "label": null,
              "kind": "main",
              "country": "",
              "federal_state": "",
              "postal_code": "80000",
              "city": "AMIENS"
            },
            "unique_credit_identifier": null,
            "parent_reference": "OP80|CENT|89|149|DO26|A|1",
            "legal_model_space": "",
            "useful_space": 0,
            "corrected_space": 0,
            "new_rent_amount": null,
            "rental_charge": null,
            "condition": "",
            "location": "",
            "immovable_property_valuation": 0,
            "valuation_year": 0,
            "comment": null,
            "category": "Foyer",
            "category_id": 283,
            "type": "COLLECTIF TYPE 1BIS",
            "type_id": 618,
            "real_space": 27,
            "living_space": 27,
            "unit_for_flat_space": null,
            "vacant": false,
            "vacant_from": null,
            "vacancy_reason": null,
            "construction_date": "-0001-11-30",
            "floor": null,
            "bk01": {
              "main_account_number": null,
              "property_account_number": null,
              "branch_account_number": null
            },
            "surface_for_hot_water_consumption": null,
            "metering_service_data": null
          },
          "contacts": []
        }
      ],
      "tenants": [
        {
          "person_id": 904316,
          "person_reference": "2162801",
          "person_first_name": "APREMIS",
          "person_last_name": "APREMIS",
          "birth_date": "1950-01-01",
          "title": "Association",
          "salutation": "ASSO",
          "status": "P",
          "arrival_date": "2019-03-28",
          "departure_date": null,
          "parent_link": null
        }
      ],
      "insurances": [
        {
          "id": 334394,
          "name": "MAIF",
          "insurance_policy": "2388193 H",
          "reference": "",
          "home": "",
          "start_date": "2021-01-01",
          "end_date": "2021-12-31"
        }
      ]
    }
  ]
}

【问题讨论】:

    标签: javascript arrays json reactjs typescript


    【解决方案1】:

    我在您的 JSON 数据中看不到 LeaseStatusLeaseStatus.Primary,但这对我有用:

    myActiveContractItems.results.filter(myActiveContractItem => myActiveContractItem.leases.some(lease => lease.status === "P"))
    

    如果myActiveContractItems 已经与results 数组相同,只需从我上面的代码中删除.results

    这会将合同项目过滤为仅具有至少一个状态等于"P" 的租约的合同项目。

    因此,您数据中的四个合同之一被过滤掉,返回其余三个。

    【讨论】:

      【解决方案2】:

      您应该为过滤器回调函数返回一个布尔值。检测至少一个租赁项目的状态是P(而不是p,我想是这样)。

      演示:

      const input = {
        "results": [
          {
            "contract": {
              "id": 445134,
              "reference": "L|2190197",
              "label": "APREMIS",
              "status": null,
              "payment_mode": null,
              "address": {
                "street": "1 RUE DES ALPILLES",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80000",
                "city": "AMIENS"
              },
              "billing_address": {
                "street": "1 RUE DES ALPILLES",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80090",
                "city": "AMIENS"
              },
              "primary_bank_account": {
                "bank": "",
                "iban": "",
                "bic": "",
                "name_of_account_holder": "",
                "rib": "   ",
                "rum": "",
                "blz": null,
                "account_number": null
              },
              "dedicated_bank_account": {
                "bank": "",
                "iban": "",
                "bic": ""
              },
              "number": "2190197",
              "day_of_collection": 0,
              "direct_debit_start_date": "-0001-11-30",
              "validate": false,
              "balance": -629.64,
              "signed": true,
              "company": null,
              "contacts": [],
              "rent_components": []
            },
            "leases": [
              {
                "reference": null,
                "metering_service_data": null,
                "start_date": "2019-03-05",
                "end_date": "-0001-11-30",
                "presumed_end_date": "-0001-11-30",
                "signing_date": "2019-02-20",
                "expected_rent_deposit": 0,
                "actual_rent_deposit": 0,
                "rent_amount": 217.83,
                "vat": 0,
                "charge_amount": 96.99,
                "flat_category": "Logement",
                "flat_category_id": 291,
                "flat_type": "COLLECTIF TYPE 1BIS",
                "flat_type_id": 618,
                "cost_contribution": 0,
                "tenant_rank": 9,
                "status": "P",
                "end_inspection": null,
                "number_of_occupants": null,
                "move_in_date": null,
                "handover_date": null,
                "move_out_date": null,
                "id": 837057,
                "leaving_reason": null,
                "notice_period": null,
                "flat": {
                  "id": 332705,
                  "reference": "OP80|SUDE|41|70|AL01|A|2|MISLCAL108",
                  "reference_label": "MISLCAL108",
                  "label": "MISLCAL108",
                  "flat_contact": [],
                  "valid": {
                    "from": "1975-12-01",
                    "to": "-0001-11-30"
                  },
                  "address": {
                    "street": "1 RUE DES ALPILLES",
                    "label": null,
                    "kind": "main",
                    "country": "",
                    "federal_state": "",
                    "postal_code": "80090",
                    "city": "AMIENS"
                  },
                  "unique_credit_identifier": null,
                  "parent_reference": "OP80|SUDE|41|70|AL01|A|2",
                  "legal_model_space": "",
                  "useful_space": 0,
                  "corrected_space": 0,
                  "new_rent_amount": null,
                  "rental_charge": null,
                  "condition": "",
                  "location": "108",
                  "immovable_property_valuation": 0,
                  "valuation_year": 0,
                  "comment": null,
                  "category": "Logement",
                  "category_id": 291,
                  "type": "COLLECTIF TYPE 1BIS",
                  "type_id": 618,
                  "real_space": 36,
                  "living_space": 31,
                  "unit_for_flat_space": null,
                  "vacant": false,
                  "vacant_from": null,
                  "vacancy_reason": null,
                  "construction_date": "-0001-11-30",
                  "floor": null,
                  "bk01": {
                    "main_account_number": null,
                    "property_account_number": null,
                    "branch_account_number": null
                  },
                  "surface_for_hot_water_consumption": null,
                  "metering_service_data": null
                },
                "contacts": []
              }
            ],
            "tenants": [],
            "insurances": [
              {
                "id": 334281,
                "name": "MAIF",
                "insurance_policy": "2388193 H",
                "reference": "",
                "home": "",
                "start_date": "2021-01-01",
                "end_date": "2021-12-31"
              }
            ]
          },
          {
            "contract": {
              "id": 445147,
              "reference": "L|2190211",
              "label": "APREMIS",
              "status": null,
              "payment_mode": null,
              "address": {
                "street": "4 ALLEE PIERRE ROLLIN",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80000",
                "city": "AMIENS"
              },
              "billing_address": {
                "street": "4 ALLEE PIERRE ROLLIN",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80090",
                "city": "AMIENS"
              },
              "primary_bank_account": {
                "bank": "",
                "iban": "",
                "bic": "",
                "name_of_account_holder": "",
                "rib": "   ",
                "rum": "",
                "blz": null,
                "account_number": null
              },
              "dedicated_bank_account": {
                "bank": "",
                "iban": "",
                "bic": ""
              },
              "number": "2190211",
              "day_of_collection": 0,
              "direct_debit_start_date": "-0001-11-30",
              "validate": false,
              "balance": -908.28,
              "signed": true,
              "company": null,
              "contacts": [],
              "rent_components": []
            },
            "leases": [
              {
                "reference": null,
                "metering_service_data": null,
                "start_date": "2019-03-06",
                "end_date": "-0001-11-30",
                "presumed_end_date": "-0001-11-30",
                "signing_date": "2019-02-26",
                "expected_rent_deposit": 0,
                "actual_rent_deposit": 0,
                "rent_amount": 331.66,
                "vat": 0,
                "charge_amount": 122.48,
                "flat_category": "Logement",
                "flat_category_id": 291,
                "flat_type": "COLLECTIF TYPE 2",
                "flat_type_id": 619,
                "cost_contribution": 0,
                "tenant_rank": 8,
                "status": "P",
                "end_inspection": null,
                "number_of_occupants": null,
                "move_in_date": null,
                "handover_date": null,
                "move_out_date": null,
                "id": 837473,
                "leaving_reason": null,
                "notice_period": null,
                "flat": {
                  "id": 331154,
                  "reference": "OP80|SUDE|52|89|RO02|C|0|PRBLCRO058",
                  "reference_label": "PRBLCRO058",
                  "label": "PRBLCRO058",
                  "flat_contact": [],
                  "valid": {
                    "from": "1980-10-16",
                    "to": "-0001-11-30"
                  },
                  "address": {
                    "street": "4 ALLEE PIERRE ROLLIN",
                    "label": null,
                    "kind": "main",
                    "country": "",
                    "federal_state": "",
                    "postal_code": "80090",
                    "city": "AMIENS"
                  },
                  "unique_credit_identifier": null,
                  "parent_reference": "OP80|SUDE|52|89|RO02|C|0",
                  "legal_model_space": "",
                  "useful_space": 0,
                  "corrected_space": 0,
                  "new_rent_amount": null,
                  "rental_charge": null,
                  "condition": "",
                  "location": "58",
                  "immovable_property_valuation": 0,
                  "valuation_year": 0,
                  "comment": null,
                  "category": "Logement",
                  "category_id": 291,
                  "type": "COLLECTIF TYPE 2",
                  "type_id": 619,
                  "real_space": 54,
                  "living_space": 54,
                  "unit_for_flat_space": null,
                  "vacant": false,
                  "vacant_from": null,
                  "vacancy_reason": null,
                  "construction_date": "-0001-11-30",
                  "floor": null,
                  "bk01": {
                    "main_account_number": null,
                    "property_account_number": null,
                    "branch_account_number": null
                  },
                  "surface_for_hot_water_consumption": null,
                  "metering_service_data": null
                },
                "contacts": []
              }
            ],
            "tenants": [],
            "insurances": [
              {
                "id": 334294,
                "name": "MAIF",
                "insurance_policy": "2388193 H",
                "reference": "",
                "home": "",
                "start_date": "2021-01-01",
                "end_date": "2021-12-31"
              }
            ]
          },
          {
            "contract": {
              "id": 445170,
              "reference": "L|2190237",
              "label": "APREMIS",
              "status": null,
              "payment_mode": null,
              "address": {
                "street": "34 RUE DU 31 AOUT 1944",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80000",
                "city": "AMIENS"
              },
              "billing_address": {
                "street": "34 RUE DU 31 AOUT 1944",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80090",
                "city": "AMIENS"
              },
              "primary_bank_account": {
                "bank": "",
                "iban": "",
                "bic": "",
                "name_of_account_holder": "",
                "rib": "   ",
                "rum": "",
                "blz": null,
                "account_number": null
              },
              "dedicated_bank_account": {
                "bank": "",
                "iban": "",
                "bic": ""
              },
              "number": "2190237",
              "day_of_collection": 0,
              "direct_debit_start_date": "-0001-11-30",
              "validate": false,
              "balance": -834.2,
              "signed": true,
              "company": null,
              "contacts": [],
              "rent_components": []
            },
            "leases": [
              {
                "reference": null,
                "metering_service_data": null,
                "start_date": "2019-03-05",
                "end_date": "-0001-11-30",
                "presumed_end_date": "-0001-11-30",
                "signing_date": "2019-03-01",
                "expected_rent_deposit": 0,
                "actual_rent_deposit": 0,
                "rent_amount": 311.21,
                "vat": 0,
                "charge_amount": 105.89,
                "flat_category": "Logement",
                "flat_category_id": 291,
                "flat_type": "COLLECTIF TYPE 4",
                "flat_type_id": 621,
                "cost_contribution": 0,
                "tenant_rank": 9,
                "status": "P",
                "end_inspection": null,
                "number_of_occupants": null,
                "move_in_date": null,
                "handover_date": null,
                "move_out_date": null,
                "id": 826780,
                "leaving_reason": null,
                "notice_period": null,
                "flat": {
                  "id": 299105,
                  "reference": "OP80|CENT|7|8|AO34|A|4|318LCAO024",
                  "reference_label": "318LCAO024",
                  "label": "318LCAO024",
                  "flat_contact": [],
                  "valid": {
                    "from": "1958-11-01",
                    "to": "-0001-11-30"
                  },
                  "address": {
                    "street": "34 RUE DU 31 AOUT 1944",
                    "label": null,
                    "kind": "main",
                    "country": "",
                    "federal_state": "",
                    "postal_code": "80090",
                    "city": "AMIENS"
                  },
                  "unique_credit_identifier": null,
                  "parent_reference": "OP80|CENT|7|8|AO34|A|4",
                  "legal_model_space": "",
                  "useful_space": 0,
                  "corrected_space": 0,
                  "new_rent_amount": null,
                  "rental_charge": null,
                  "condition": "",
                  "location": "24",
                  "immovable_property_valuation": 0,
                  "valuation_year": 0,
                  "comment": null,
                  "category": "Logement",
                  "category_id": 291,
                  "type": "COLLECTIF TYPE 4",
                  "type_id": 621,
                  "real_space": 55,
                  "living_space": 55,
                  "unit_for_flat_space": null,
                  "vacant": false,
                  "vacant_from": null,
                  "vacancy_reason": null,
                  "construction_date": "-0001-11-30",
                  "floor": null,
                  "bk01": {
                    "main_account_number": null,
                    "property_account_number": null,
                    "branch_account_number": null
                  },
                  "surface_for_hot_water_consumption": null,
                  "metering_service_data": null
                },
                "contacts": []
              }
            ],
            "tenants": [],
            "insurances": [
              {
                "id": 334319,
                "name": "AXA",
                "insurance_policy": "2659495304",
                "reference": "",
                "home": "",
                "start_date": "2021-01-01",
                "end_date": "2021-12-31"
              }
            ]
          },
          {
            "contract": {
              "id": 445240,
              "reference": "L|2190322",
              "label": "APREMIS",
              "status": null,
              "payment_mode": null,
              "address": {
                "street": "26 -34 RUE DE LA DODANE",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80000",
                "city": "AMIENS"
              },
              "billing_address": {
                "street": "26 -34 RUE DE LA DODANE",
                "label": null,
                "kind": "main",
                "country": "",
                "federal_state": "",
                "postal_code": "80000",
                "city": "AMIENS"
              },
              "primary_bank_account": {
                "bank": "",
                "iban": "",
                "bic": "",
                "name_of_account_holder": "",
                "rib": "   ",
                "rum": "",
                "blz": null,
                "account_number": null
              },
              "dedicated_bank_account": {
                "bank": "",
                "iban": "",
                "bic": ""
              },
              "number": "2190322",
              "day_of_collection": 0,
              "direct_debit_start_date": "-0001-11-30",
              "validate": false,
              "balance": -4489.57,
              "signed": true,
              "company": null,
              "contacts": [],
              "rent_components": []
            },
            "leases": [
              {
                "reference": null,
                "metering_service_data": null,
                "start_date": "2019-03-28",
                "end_date": "-0001-11-30",
                "presumed_end_date": "-0001-11-30",
                "signing_date": "2019-03-19",
                "expected_rent_deposit": 0,
                "actual_rent_deposit": 0,
                "rent_amount": 0,
                "vat": 0,
                "charge_amount": 0,
                "flat_category": "Foyer",
                "flat_category_id": 283,
                "flat_type": "COLLECTIF TYPE 1BIS",
                "flat_type_id": 618,
                "cost_contribution": 0,
                "tenant_rank": 1,
                "status": "S",
                "end_inspection": null,
                "number_of_occupants": null,
                "move_in_date": null,
                "handover_date": null,
                "move_out_date": null,
                "id": 840484,
                "leaving_reason": null,
                "notice_period": null,
                "flat": {
                  "id": 301118,
                  "reference": "OP80|CENT|89|149|DO26|A|1|DODDEDO012",
                  "reference_label": "DODDEDO012",
                  "label": "DODDEDO012",
                  "flat_contact": [],
                  "valid": {
                    "from": "1993-08-01",
                    "to": "-0001-11-30"
                  },
                  "address": {
                    "street": "26 -34 RUE DE LA DODANE",
                    "label": null,
                    "kind": "main",
                    "country": "",
                    "federal_state": "",
                    "postal_code": "80000",
                    "city": "AMIENS"
                  },
                  "unique_credit_identifier": null,
                  "parent_reference": "OP80|CENT|89|149|DO26|A|1",
                  "legal_model_space": "",
                  "useful_space": 0,
                  "corrected_space": 0,
                  "new_rent_amount": null,
                  "rental_charge": null,
                  "condition": "",
                  "location": "",
                  "immovable_property_valuation": 0,
                  "valuation_year": 0,
                  "comment": null,
                  "category": "Foyer",
                  "category_id": 283,
                  "type": "COLLECTIF TYPE 1BIS",
                  "type_id": 618,
                  "real_space": 27,
                  "living_space": 27,
                  "unit_for_flat_space": null,
                  "vacant": false,
                  "vacant_from": null,
                  "vacancy_reason": null,
                  "construction_date": "-0001-11-30",
                  "floor": null,
                  "bk01": {
                    "main_account_number": null,
                    "property_account_number": null,
                    "branch_account_number": null
                  },
                  "surface_for_hot_water_consumption": null,
                  "metering_service_data": null
                },
                "contacts": []
              }
            ],
            "tenants": [
              {
                "person_id": 904316,
                "person_reference": "2162801",
                "person_first_name": "APREMIS",
                "person_last_name": "APREMIS",
                "birth_date": "1950-01-01",
                "title": "Association",
                "salutation": "ASSO",
                "status": "P",
                "arrival_date": "2019-03-28",
                "departure_date": null,
                "parent_link": null
              }
            ],
            "insurances": [
              {
                "id": 334394,
                "name": "MAIF",
                "insurance_policy": "2388193 H",
                "reference": "",
                "home": "",
                "start_date": "2021-01-01",
                "end_date": "2021-12-31"
              }
            ]
          }
        ]
      };
      
      const filtered = input.results.filter(result => {
        return result.leases.some(l => l.status === 'P');
      });
      
      console.log(filtered);

      【讨论】:

        【解决方案3】:

        通过调用Array.map,在内部函数中,您所做的只是将数组元素映射到布尔值数组。只要集合中有一个租约,Array.filter 就应该返回合同项(因为空数组是错误的)。

        改为在内部函数中使用 Array.some,如果至少有一个元素与谓词匹配,则返回 true。

        myActiveContractItems.filter((item) => 
          item.leases.some((lease) => lease.status === LeaseStatus.Primary));
        

        【讨论】:

          【解决方案4】:

          首先,不要忘记 JavaScript 是一种区分大小写的语言。这意味着语言关键字、变量、函数名和任何其他标识符必须始终使用一致的大写字母。字符pP 不同。在您的 JSON 数据中,租赁值是 P 而不是 p

          解决方案

          myActiveContractItems.results.filter((item)=>{
              return item.leases.filter((lease)=>{
                  return lease.status ==='P'; // Or LeaseStatus.Primary 
            }).length > 0;
          });
          
          1. 作用于myActiveContractItems.results 数组并过滤它
          2. 按状态过滤item.leases(在这种情况下等于P
          3. 如果 Filtered Leases 有项目 (length > 0),则合同可以包含在主过滤器​​中

          可重复使用的解决方案

          理想情况下,您可以创建一个通用函数来按租约状态过滤并使用some 方法而不是检查具有该状态的元素的length

          let filterByLeaseStatus = (leaseStatus)=>
          myActiveContractItems.results.filter((item)=>
          item.leases.some((lease)=>lease.status ===leaseStatus));
          

          然后使用filterByLeaseStatus('P')filterByLeaseStatus(LeaseStatus.Primary)

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-12-27
            • 2019-11-28
            • 2013-01-19
            相关资源
            最近更新 更多