我试图合并与用户进行数据中的经验教训。我相信我有一个指针的问题。
我已经与两个阵列的内部合并成功。问题来通过用户循环和没有得到附带进度数据的权利教训数据。
let lessons = [
{“id”: “0106c568-70c0-4e56-8139-8e7f7d124f95",},
{“id”: “033e18a2-d470-4fd7-8bdc-53e610f3f784",},
{“id”: “d60f751c-d7d2-4dc6-9eda-a03bc5ebddc6",},
];
const usersProgresses = [
[
{
“id”: “cjrtmj9d601b908559oxe8hwk”,
“lesson”: “0106c568-70c0-4e56-8139-8e7f7d124f95",
“score”: null,
},
{
“id”: “cjrtmk2hv01bx0855yof2ehj4”,
“lesson”: “033e18a2-d470-4fd7-8bdc-53e610f3f784”,
“score”: 100,
},
{
“id”: “cjrtmlohd01cp0855jnzladye”,
“lesson”: “3724d7df-311c-46d9-934f-a9c44d9335ae”,
“score”: 20,
}
],
...
];
// for each user
const result = usersProgresses.map(user => {
// merge progress and lesson data by lesson.id
const mergedProgress = [...lessons].map(lesson => {
return _.merge(lesson,_ .find(userProgress, { lesson: lesson.id }));
});
return mergedProgress;
});
预计数据出来result
的:
[
[
{
“id”: “0106c568-70c0-4e56-8139-8e7f7d124f95”,
“lesson”: “0106c568-70c0-4e56-8139-8e7f7d124f95”,
“score”: null,
},
{
“id”: “033e18a2-d470-4fd7-8bdc-53e610f3f784",
“lesson”: “033e18a2-d470-4fd7-8bdc-53e610f3f784",
“score”: 100,
},
{
“id”: “d60f751c-d7d2-4dc6-9eda-a03bc5ebddc6”,
}
]
]
但得到:
[
[
{
“id”: “0106c568-70c0-4e56-8139-8e7f7d124f95”,
},
{
“id”: “033e18a2-d470-4fd7-8bdc-53e610f3f784”,
},
{
“id”: “d60f751c-d7d2-4dc6-9eda-a03bc5ebddc6”,
}
]
]
你可以使用香草JS嵌套.map
做这样的事情:
const lessons = [{"id":"0106c568-70c0-4e56-8139-8e7f7d124f95",},{"id":"033e18a2-d470-4fd7-8bdc-53e610f3f784",},{"id":"d60f751c-d7d2-4dc6-9eda-a03bc5ebddc6",}]
const usersProgress = [[{"id":"cjrtmj9d601b908559oxe8hwk","lesson":"0106c568-70c0-4e56-8139-8e7f7d124f95","score":null,},{"id":"cjrtmk2hv01bx0855yof2ehj4","lesson":"033e18a2-d470-4fd7-8bdc-53e610f3f784","score":100,},{"id":"cjrtmlohd01cp0855jnzladye","lesson":"3724d7df-311c-46d9-934f-a9c44d9335ae","score":20,}]]
const output = usersProgress.map(user => lessons.map(lesson =>
({...user.find(p => p.lesson == lesson.id), ...lesson }))
);
console.log(output)
您可以使用_.keyBy()
通过课ID创建的用户经验的字典。当创建结果对象,获得使用括号符号标识的教训,传播它(undefined
值将被忽略)。
const lessons = [{"id":"0106c568-70c0-4e56-8139-8e7f7d124f95",},{"id":"033e18a2-d470-4fd7-8bdc-53e610f3f784",},{"id":"d60f751c-d7d2-4dc6-9eda-a03bc5ebddc6",}]
const usersProgress = [[{"id":"cjrtmj9d601b908559oxe8hwk","lesson":"0106c568-70c0-4e56-8139-8e7f7d124f95","score":null,},{"id":"cjrtmk2hv01bx0855yof2ehj4","lesson":"033e18a2-d470-4fd7-8bdc-53e610f3f784","score":100,},{"id":"cjrtmlohd01cp0855jnzladye","lesson":"3724d7df-311c-46d9-934f-a9c44d9335ae","score":20,}]]
const result = usersProgress.map(user => {
const lessonsById = _.keyBy(user, 'lesson') // create a dictionary of lesson by id
return lessons.map(({ id }) => ({
...lessonsById[id], // get the lesson or undefined if not found, and spread
id
}))
});
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
const usersProgresses = [
[
{
"id": "cjrtmj9d601b908559oxe8hwk",
"lesson": "0106c568-70c0-4e56-8139-8e7f7d124f95",
"score": null,
},
{
"id": "cjrtmk2hv01bx0855yof2ehj4",
"lesson": "033e18a2-d470-4fd7-8bdc-53e610f3f784",
"score": 100,
},
{
"id": "cjrtmlohd01cp0855jnzladye",
"lesson": "3724d7df-311c-46d9-934f-a9c44d9335ae",
"score": 20,
}
],
];
let lessons = [
{"id": "0106c568-70c0-4e56-8139-8e7f7d124f95",},
{"id": "033e18a2-d470-4fd7-8bdc-53e610f3f784",},
{"id": "d60f751c-d7d2-4dc6-9eda-a03bc5ebddc6",},
];
const mergedProgress = usersProgresses.map((Progresses) => {
return [...lessons].map(lesson => {
return Object.assign(lesson, Progresses.find((i) => i.lesson === lesson.id));
});
})
console.log(mergedProgress)