Javascript基于另一个数组的索引重新索引数组

Javascript基于另一个数组的索引重新索引数组,javascript,Javascript,我想弄明白。不能我有两个数组,我只想对其中一个数组的索引进行排序,以便按其对象匹配索引 数组1如下所示: var arr1 = [ { "name": "bobby", "occupation": "singer" }, { "name": "mindy", "occupation": "artist" } ] 和阵列2: var arr2 = [ { "name": "mindy", "hobby": "drawing" },

我想弄明白。不能我有两个数组,我只想对其中一个数组的索引进行排序,以便按其对象匹配索引

数组1如下所示:

var arr1 = [
  {
   "name": "bobby",
   "occupation": "singer"
  },
  {
   "name": "mindy",
   "occupation": "artist"
  }
] 
和阵列2:

var arr2 = [
  {
   "name": "mindy",
   "hobby": "drawing"
  },
  {
   "name": "bobby",
   "hobby": "driving"
  }
]

哪一个被重新索引并不重要。重点是我有两个名字
bobby
mindy
,我想重新排列其中一个数组,以便它们的索引与另一个匹配

使用
排序

请在下面内联找到注释。
var arr1=[
{
“姓名”:“鲍比”,
“职业”:“歌手”
},
{
“姓名”:“明迪”,
“职业”:“艺术家”
}
] 
var arr2=[
{
“姓名”:“明迪”,
“爱好”:“绘画”
},
{
“姓名”:“鲍比”,
“爱好”:“驾驶”
}
]
//创建arr2名称的中间数组
arr2Names=arr2.map(x=>x.name)
//使用排序:
arr1=arr1.sort((x,y)=>arr2Names.indexOf(x.name)-arr2Names.indexOf(y.name))
console.log(arr1,arr2)
通常的(?)短版本是O(n2)(假设所有名称都是唯一的并且存在于两个数组中):

var arr1=[{“姓名”:“鲍比”,“职业”:“歌手”},
{“姓名”:“明迪”,“职业”:“艺术家”}];
var arr2=[{“name”:“mindy”,“hobby”:“drawing”},
{“姓名”:“鲍比”,“爱好”:“驾驶”}];
var arr2=arr1.map(a=>arr2.find(b=>a.name==b.name));
log(JSON.stringify(arr1.replace('}','},'},\n'));

log(JSON.stringify(arr2.replace('}','},'},\n'))没有包含任何内容,因为我认为逻辑不合理。我试着制作一个新数组并按索引推进。类似于
for(让xo=0;xo
这两个数组中的名称是否总是同时存在?@Gerrit0您是对的。我编辑了答案以更正比较函数。希望它现在是正确的,看起来更好-我发现这个比较相当混乱,每次我在代码库中滚动它时可能都会浪费时间,但它是有效的:)我同意,这需要一点时间来理解发生了什么,但我不知道是否会有一个更容易理解/简单的解决方案。我最大的不满是变量名(
x
y
):P通常排序使用
a
b
,因此这让我不再认为它是笛卡尔坐标,除了变量名之外没有其他原因。使用大O表示法,数字系数没有任何意义,所以干脆放弃它。否则,回答得好。@PatrickRoberts我知道对于时间复杂度来说,系数没有意义,但2N对100N对某人来说不是有意义吗?一开始,我想,是的,我理解为什么它不重要,但是当涉及到微观优化时,它不重要吗?在一个算法中,系数没有单位,所以它不传递任何信息。它的意思是“函数调用”、“代码行”、“汇编指令”、“位切换”吗?如果你调用一个函数两次而不是一次,它仍然是一个大O。它不会改变复杂度,只是改变比例,所以它通常被忽略。