首页 > 解决方案 > 如何将内部包含数组的对象数组中的数据添加到另一个对象数组中?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
}

标签: javascriptarraysobjectfilter

解决方案


请检查示例和更正和建议。

  • 更正:scoresData.find(s=> s.name === ele.name? s.score: 0)- 在这里你不关闭括号Array.find并尝试访问它在find. 在您的代码中,您将获得scoreDataobject 而不是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)


推荐阅读