使用 lodash 在嵌套数组中查找值
Find values in nested array using 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,
},
]
Lodash:
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
你不需要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>
我正在尝试检索嵌套数组中的值,但我的函数正在返回所有内容。我只想返回数组中的 '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,
},
]
Lodash:
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
你不需要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>