首页 > 解决方案 > 使用 lodash 在嵌套数组中查找值

问题描述

我正在尝试在嵌套数组中检索值,但我的函数正在返回所有内容。我想只支持数组中的“carTime”值。

我的数组返回了什么。

[
  {
    "carId": "13122",
    "carInstances": [
      {
        "carInstanceId": "472",
        "carTime": "2020-09-23T21:45:00.000+0000",
        "state": "COMPLETE",
      }
    ],
    "isPaused": false,
  },
  {
    "carId": "1312",
    "carInstances": [
      {
        "carInstanceId": "47209",
        "carTime": "2020-09-23T21:45:00.000+0000",
        "state": "COMPLETE",
      }
    ],
    "isPaused": false,
  },
]

罗达什:

const result = [
  {
    "carId": "13122656",
    "carInstances": [
      {
        "carInstanceId": "47209",
        "carTime": "2020-09-23T21:45:00.000+0000",
        "state": "COMPLETE",
      }
    ],
    "isPaused": false,
  },
  {
    "carId": "1312",
    "carInstances": [
      {
        "carInstanceId": "4720",
        "carTime": "2020-09-23T21:45:00.000+0000",
        "state": "COMPLETE",
      }
    ],
    "isPaused": false,
  },
]

const findCategoryById = (sections) => {
        const jobInstance = _.forEach(sections, (section) => {
          return section.carInstances.carTime;
        });
        return jobInstance;
      };
      findCategoryById(result)

期望的输出:

2020-09-23T21:45:00.000+0000,
2020-09-23T21:45:00.000+0000

标签: javascriptlodash

解决方案


你不需要 lodash 来解决这个问题。一个小的 JS 函数将使用 reduce 和 map。使用 lodash 你可以: _(result).flatMap('carInstances').flatMap("carTime")).values()

const result = [
  {
    "carId": "13122656-169f-45fa-be47-26c9d23dcb7b",
    "carInstances": [
      {
        "carInstanceId": "47209558-f9e1-4f81-a600-5da6ce238a6e",
        "carTime": "2020-09-23T21:45:00.000+0000",
        "state": "COMPLETE",
      }
    ],
    "isPaused": false,
  },
  {
    "carId": "13122656-169f-45fa-be47-26c9d23dcb7b",
    "carInstances": [
      {
        "carInstanceId": "47209558-f9e1-4f81-a600-5da6ce238a6e",
        "carTime": "2020-09-23T21:45:00.000+0000",
        "state": "COMPLETE",
      }
    ],
    "isPaused": false,
  },
];

const listCarTime = (res) => {
  return res.reduce((acc, car) => {
    acc.push(...car.carInstances.map((instance) => instance.carTime));
    return acc;  
  }, []);
}

console.log("lodash", _(result).flatMap('carInstances').flatMap("carTime").values())


console.log("vanilla", listCarTime(result));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>


推荐阅读