如何使用过滤器在subArray Null值Javascript中删除Array

时间:2019-05-03 07:42:33

标签: javascript angular typescript multidimensional-array

我要从阵列中删除itineraryLinked: null值,请删除。我尝试了下面的代码,它不能正常工作,您能解释一下如何从数组中删除null itineraryLinked

子数组代码内部的数组从过滤器中删除空值。

我想使用内部路线从数组中删除空元素或空元素

这是我的回忆

let destinationList = [{
    "name": "Bahamas",
    "slug": "bahamas",
    "description": "asdfsadf",
    "weekEnabled": false,
    "itineraries": [{
      "name": "Les Bahamas - Archipel des Exumas",
      "slug": "les-bahamas-archipel-des-exumas",
      "itineraryLinked": null
    }],
    "featured": false,
    "future": false,
    "sort": 8,
    "minPrice": null
  },
  {
    "name": "Croatie & Monténégro",
    "slug": "croatie-montenegro",
    "description": "avfdsaf",
    "thumbnail": "uploads/2019/02/2_croatie-thumbnail.jpg",
    "weekEnabled": true,
    "itineraries": [{
        "name": "Croatie, la côte adriatique depuis Dubrovnik",
        "slug": "croatie-la-cote-adriatique-depuis-dubrovnik",
        "itineraryLinked": {
          "name": "Monténégro, les gorges du Kotor depuis Dubrovnik",
          "slug": "montenegro-les-gorges-du-kotor-depuis-dubrovnik"
        }
      },
      {
        "name": "Monténégro, les gorges du Kotor depuis Dubrovnik",
        "slug": "montenegro-les-gorges-du-kotor-depuis-dubrovnik",
        "itineraryLinked": {
          "name": "Croatie, la côte adriatique depuis Dubrovnik",
          "slug": "croatie-la-cote-adriatique-depuis-dubrovnik"
        }
      }
    ],
    "featured": false,
    "future": false,
    "sort": 3,
    "minPrice": null
  },
  {
    "name": "Guadeloupe",
    "slug": "guadeloupe",
    "description": "sdafsda",
    "thumbnail": "uploads/2019/02/guadeloupe-thumbnail.jpg",
    "weekEnabled": false,
    "itineraries": [{
      "name": "Guadeloupe Marie Galante Les Saintes Antigua",
      "slug": "guadeloupe-marie-galante-les-saintes-antigua",
      "itineraryLinked": null
    }],
    "featured": false,
    "future": false,
    "sort": 6,
    "minPrice": null
  },
  {
    "name": "St Barth & îles Vierges",
    "slug": "st-barth-iles-vierges",
    "description": "sadfdsagf",
    "thumbnail": "uploads/2019/04/st-barth-iles-vierges-thumbnail.jpg",
    "weekEnabled": true,
    "itineraries": [{
        "name": "Iles Vierges, Tortola",
        "slug": "iles-vierges-tortola",
        "itineraryLinked": {
          "name": "Croisière Turquoise - Saint Martin, Saint Barth, Archipel d'Anguilla",
          "slug": "croisiere-turquoise-saint-martin-saint-barth-archipel-danguilla"
        }
      },
      {
        "name": "Croisière Turquoise - Saint Martin, Saint Barth, Archipel d'Anguilla",
        "slug": "croisiere-turquoise-saint-martin-saint-barth-archipel-danguilla",
        "itineraryLinked": {
          "name": "Iles Vierges, Tortola",
          "slug": "iles-vierges-tortola"
        }
      }
    ],
    "featured": false,
    "future": false,
    "sort": 5,
    "minPrice": null
  },
  {
    "name": "Côte d'Azur",
    "slug": "cote-dazur",
    "description": "sadf",
    "thumbnail": "uploads/2018/11/cote-dazur-thumbnail.jpg",
    "weekEnabled": null,
    "itineraries": [{
      "name": "Côte d'Azur des îles d'Or aux îles de Lérins",
      "slug": "cote-dazur-des-iles-dor-aux-iles-de-lerins",
      "itineraryLinked": null
    }],
    "featured": false,
    "future": false,
    "sort": 1,
    "minPrice": null
  }
]

let linkedItinery = destinationList.filter(function(element) {
  return element.itineraries.filter(function(subElement) {
    return element.itineraries.some(function(v) {
      return v.itineraryLinked !== null;
    });
  });
});

console.log(linkedItinery)

2 个答案:

答案 0 :(得分:1)

some中不需要filter。您可以将reducefilter一起使用。

let destinationList = [{
    "name": "Bahamas",
    "slug": "bahamas",
    "description": "asdfsadf",
    "weekEnabled": false,
    "itineraries": [{
      "name": "Les Bahamas - Archipel des Exumas",
      "slug": "les-bahamas-archipel-des-exumas",
      "itineraryLinked": null
    }],
    "featured": false,
    "future": false,
    "sort": 8,
    "minPrice": null
  },
  {
    "name": "Croatie & Monténégro",
    "slug": "croatie-montenegro",
    "description": "avfdsaf",
    "thumbnail": "uploads/2019/02/2_croatie-thumbnail.jpg",
    "weekEnabled": true,
    "itineraries": [{
        "name": "Croatie, la côte adriatique depuis Dubrovnik",
        "slug": "croatie-la-cote-adriatique-depuis-dubrovnik",
        "itineraryLinked": {
          "name": "Monténégro, les gorges du Kotor depuis Dubrovnik",
          "slug": "montenegro-les-gorges-du-kotor-depuis-dubrovnik"
        }
      },
      {
        "name": "Monténégro, les gorges du Kotor depuis Dubrovnik",
        "slug": "montenegro-les-gorges-du-kotor-depuis-dubrovnik",
        "itineraryLinked": {
          "name": "Croatie, la côte adriatique depuis Dubrovnik",
          "slug": "croatie-la-cote-adriatique-depuis-dubrovnik"
        }
      }
    ],
    "featured": false,
    "future": false,
    "sort": 3,
    "minPrice": null
  },
  {
    "name": "Guadeloupe",
    "slug": "guadeloupe",
    "description": "sdafsda",
    "thumbnail": "uploads/2019/02/guadeloupe-thumbnail.jpg",
    "weekEnabled": false,
    "itineraries": [{
      "name": "Guadeloupe Marie Galante Les Saintes Antigua",
      "slug": "guadeloupe-marie-galante-les-saintes-antigua",
      "itineraryLinked": null
    }],
    "featured": false,
    "future": false,
    "sort": 6,
    "minPrice": null
  },
  {
    "name": "St Barth & îles Vierges",
    "slug": "st-barth-iles-vierges",
    "description": "sadfdsagf",
    "thumbnail": "uploads/2019/04/st-barth-iles-vierges-thumbnail.jpg",
    "weekEnabled": true,
    "itineraries": [{
        "name": "Iles Vierges, Tortola",
        "slug": "iles-vierges-tortola",
        "itineraryLinked": {
          "name": "Croisière Turquoise - Saint Martin, Saint Barth, Archipel d'Anguilla",
          "slug": "croisiere-turquoise-saint-martin-saint-barth-archipel-danguilla"
        }
      },
      {
        "name": "Croisière Turquoise - Saint Martin, Saint Barth, Archipel d'Anguilla",
        "slug": "croisiere-turquoise-saint-martin-saint-barth-archipel-danguilla",
        "itineraryLinked": {
          "name": "Iles Vierges, Tortola",
          "slug": "iles-vierges-tortola"
        }
      }
    ],
    "featured": false,
    "future": false,
    "sort": 5,
    "minPrice": null
  },
  {
    "name": "Côte d'Azur",
    "slug": "cote-dazur",
    "description": "sadf",
    "thumbnail": "uploads/2018/11/cote-dazur-thumbnail.jpg",
    "weekEnabled": null,
    "itineraries": [{
      "name": "Côte d'Azur des îles d'Or aux îles de Lérins",
      "slug": "cote-dazur-des-iles-dor-aux-iles-de-lerins",
      "itineraryLinked": null
    }],
    "featured": false,
    "future": false,
    "sort": 1,
    "minPrice": null
  }
];
    

const output = destinationList.reduce((accu, {itineraries}) => {
    accu.push(...itineraries.filter(({itineraryLinked}) => itineraryLinked !== null));
    return accu;
}, []);

console.log(output);

答案 1 :(得分:0)

在集合上映射

let linkedItinery = destinationList.map(function(element) {
    // ...
    Filter out the subDocuments (with null values)
    element.itineraries = element.itineraries.filter(function(subElement) {
      return subElement.itineraryLinked !== null;
    });
    // Replace the original doc
    return element;
  });