javascript - 如何将内部包含数组的对象数组中的数据添加到另一个对象数组中?javascript
问题描述
这是我的代码,我想创建另一个过滤数组,如下例所示,我有 2 个数组并想向其中添加分数信息,我知道这很简单但找不到解决方案
const wishesData = [
{
name: "Peter",
presents: ["coffee", "holidays"]
},
{
name: "Mario",
presents: ["coffee", "videogames"]
},
{
name: "Amanda",
presents: ["computer", "tattoo"]
}
]
const scoresData= [
{
name: "Peter",
score: 10
},
{
name: "Mario",
score: 2.3
},
{
name: "Amanda",
score: 1.1
}
]
const result = wishesData.map((ele) => {
return {
...ele,
score: scoresData.find(s=> s.name === ele.name? s.score: 0)
}
})
console.log("este es el resultado=>",result)
我想修改数组wishData,将“分数”添加到里面的所有对象,并看起来像这个例子:
{
name: "Mario",
presents: ["coffee", "videogames"],
score: 2.3
}
解决方案
请检查示例和更正和建议。
- 更正:
scoresData.find(s=> s.name === ele.name? s.score: 0)
- 在这里你不关闭括号Array.find
并尝试访问它在find
. 在您的代码中,您将获得scoreData
object 而不是score
.
const match = scoresData.find(s=> s.name === ele.name); // -> ? s.score: 0)
return match ? match.score : 0;
// or simply
const score = scoresData.find(s=> s.name === ele.name)?.score || 0;
- 建议:需要 O(N^2) 时间。所有迭代都
wishesData
需要scoresData
每个迭代。为什么不使用reduce
示例中提供的?
const scoreMap = scoresData.reduce((a, c) => ({
...a,
[c.name]: c.score
}), {})
// you can easy to find score by
const result = wishesData.map((ele) => {
return {
...ele,
score: scoreMap[ele.name] || 0,
}
})
谢谢
const wishesData = [{
name: "Peter",
presents: ["coffee", "holidays"]
},
{
name: "Mario",
presents: ["coffee", "videogames"]
},
{
name: "Amanda",
presents: ["computer", "tattoo"]
}
]
const scoresData = [{
name: "Peter",
score: 10
},
{
name: "Mario",
score: 2.3
},
{
name: "Amanda",
score: 1.1
}
]
const scoreMap = scoresData.reduce((a, c) => ({
...a,
[c.name]: c.score
}), {})
const result = wishesData.map((ele) => {
return {
...ele,
score: scoreMap[ele.name] || 0,
}
})
console.log("este es el resultado=>", result)
这只是编辑您的原始代码
const wishesData = [{
name: "Peter",
presents: ["coffee", "holidays"]
},
{
name: "Mario",
presents: ["coffee", "videogames"]
},
{
name: "Amanda",
presents: ["computer", "tattoo"]
}
]
const scoresData = [{
name: "Peter",
score: 10
},
{
name: "Mario",
score: 2.3
},
{
name: "Amanda",
score: 1.1
}
]
const result = wishesData.map((ele) => {
return {
...ele,
score: scoresData.find(s => s.name === ele.name)?.score || 0
}
})
console.log("este es el resultado=>", result)
推荐阅读
- javafx - JavaFX:如何管理阶段的 z-index
- javascript - 有没有一种简单的方法可以将一个数字拆分为一个数字数组而不将其转换为字符串并返回?
- html - 我试图将这些 div 均匀对齐,没有空格;我不想要 4-6 之间的空格
- apache-spark - 如何计算火花组的百分比?
- reactjs - React native TextInput Component - 激活大写时显示大写锁定图标
- python-3.x - 为什么 pyspark 中的一些相关值落在 [-1,1] 之外?
- swift - 将空白图像视图上的图像保存到照片库
- elasticsearch - 如何禁用弹性搜索的前缀匹配?
- python - 为什么这些看起来一样的字符串,却被代码区别对待?
- msal - 如何修复 msal.js 中 UserAgentApplication 的“TypeError:this.isCallback 不是函数”错误