Javascript 通过匹配值搜索辅助数组并合并到主数组中

Javascript 通过匹配值搜索辅助数组并合并到主数组中,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,我有2个数组,我试图在第二个数组中找到与第一个数组中的对象Id匹配的数组对象。从那里,我需要将匹配的对象附加到主对象。我还需要只获取前3个匹配对象的键值。我一直在尝试使用下划线,但这只会将匹配的数组合并在一起。这就是我需要实现的,任何帮助都会很好 var primaryArray = [ { "Name": "Main 1", "Id": "1" }, { "Name": "Main 2", "Id": "2" } ] var secondar

我有2个数组,我试图在第二个数组中找到与第一个数组中的对象Id匹配的数组对象。从那里,我需要将匹配的对象附加到主对象。我还需要只获取前3个匹配对象的键值。我一直在尝试使用下划线,但这只会将匹配的数组合并在一起。这就是我需要实现的,任何帮助都会很好

var primaryArray = [
  {
    "Name": "Main 1",
    "Id": "1"
  },
  {
    "Name": "Main 2",
    "Id": "2"
  }
]


var secondaryArray = [
  {
    "name": "Person 1",
    "mainitemId": "1",
    "count": 120
  },
  {
    "name": "Person 2",
    "mainitemId": "1",
    "count": 80
  },
  {
    "name": "Person 3",
    "mainitemId": "1",
    "count": 125
  },
  {
    "name": "Person 4",
    "mainitemId": "1",
    "count": 130
  },
  {
    "name": "Person 5",
    "mainitemId": "2",
    "count": 90
  },
  {
    "name": "Person 6",
    "mainitemId": "2",
    "count": 85
  },
  {
    "name": "Person 7",
    "mainitemId": "2",
    "count": 105
  },
  {
    "name": "Person 8",
    "mainitemId": "2",
    "count": 110
  }
]


var resultArray = [
  {
    "Name": "Main 1",
    "Id": 1,
    "people": [
      {
        "name": "Person 4",
        "mainitemId": "1",
        "count": 130
      },
      {
        "name": "Person 3",
        "mainitemId": "1",
        "count": 125
      },
      {
        "name": "Person 1",
        "mainitemId": "1",
        "count": 120
      }
    ]
  },
  {
    "Name": "Main 2",
    "Id": 2,
    "people": [
      {
        "name": "Person 8",
        "mainitemId": "2",
        "count": 110
      },
      {
        "name": "Person 7",
        "mainitemId": "2",
        "count": 105
      },
      {
        "name": "Person 5",
        "mainitemId": "2",
        "count": 90
      }
    ]
  }
]

如果您想根据计数值获得前3名,则应为

var result = primaryArray.map(item => {
    item.people = secondaryArray.filter(peop => peop.mainitemId === item.Id)
                                .sort((a, b) => b.count - a.count)
                                .slice(0, 3);
    return item;        
})
最终结果:


您尝试过什么?您正在寻找几种方法,合并数组,按对象值搜索,并可能进行排序以确定前3名(什么决定了前3名?)。网络上有很多关于如何完成每个部分的例子。挑一个试试看。如果您对代码有问题,请将其发布在这里,我们将查看它。另外,请参阅,如果适用,请使用您自己的代码解决问题,谢谢Faly,这太完美了,省去了我的头疼,我一直在尝试.map>\uuuu.extend>.findWhere,但没有给出我需要的结果的第一部分!不客气!