Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于具有新索引的数组对JS数组进行排序_Javascript_Arrays - Fatal编程技术网

Javascript 基于具有新索引的数组对JS数组进行排序

Javascript 基于具有新索引的数组对JS数组进行排序,javascript,arrays,Javascript,Arrays,对于这个相当简单的问题,我似乎找不到一个简洁的解决办法。我有一个对象数组,如下所示: let items = [{/* */}, {/* */}, {/* */}] 此外,我还有一个包含新数组索引的数组,我希望将其应用于上述项目: const newIndices = [2,0,1] 意思是项[0]的新索引是2,项[1]的新索引是0,等等 现在我正在使用forEach,但此方法需要一个临时数组: const tempItems = [] newIndices.forEach((newInde

对于这个相当简单的问题,我似乎找不到一个简洁的解决办法。我有一个对象数组,如下所示:

let items = [{/* */}, {/* */}, {/* */}]
此外,我还有一个包含新数组索引的数组,我希望将其应用于上述项目:

const newIndices = [2,0,1]
意思是
项[0]
的新索引是
2
项[1]
的新索引是
0
,等等

现在我正在使用forEach,但此方法需要一个临时数组:

const tempItems = []
newIndices.forEach((newIndex, oldIndex) => {
  tempItems[newIndex] = items[oldIndex]
})
items = tempItems
我几乎可以肯定,这个问题有一个简单的解决办法。我也尝试过映射,但运气不佳。

一种方法是使用:

let items=['foo','bar','baz']
常数newindex=[2,0,1]
const result=newindex.reduce((acc,indice,i)=>{
acc[标识]=项目[i]
返回acc
}, [])
console.log(结果)
工作代码

let items=['foo','bar','baz']
常数newindex=[2,0,1]
const result=items.map((item,index)=>items[newindex.indexOf(index)])

log(result)
您可以将新的索引/值对映射到对象并分配给数组

const
项目=['foo','bar','baz'],
新索引=[2,0,1],
结果=Object.assign([],…items.map((v,i)=>({[newindex[i]]:v}));
console.log(结果);//巴兹福酒吧
let items=['foo','bar','baz']
常数newindex=[2,0,1]
items=newindex.map((index)=>newindex[index]).map((index)=>items[index])

console.log(items)
我已经试过了;)“foo”项应以索引2结尾,但以索引1结尾。哎呀:我把问题看得太匆忙了。我更新了我的答案。你目前的方法很好。我不会改变它。不要担心创建额外的数组/对象,通常,毕竟,当避免突变时,代码通常是最容易理解的。由于索引对您的解决方案似乎很重要,您应该记住数组的顺序有点棘手。数组不需要密集,所以迭代它们不能保证顺序。在大多数情况下,这并不重要,除非索引对你的逻辑很重要:)@RandyCasburn有趣的事实。所以,只要我的数组是稠密/填充的,我就应该能够信任索引,对吗?我可能会考虑在将来某个时候改用地图。@JonasLittau-是的,就像我们大多数人一样。但现在你知道了!快速提问,为什么{[newindexes[i]]:v}有效,而{newindexes[i]:v}无效?@mss,您需要一个计算属性。newindexes[i]不是返回数字吗?该数字应该成为对象中提供值的键?我想我遗漏了什么,你能给我一些参考资料吗?@mss,请看这里:谢谢你的参考资料,通过你的参考资料,我对物体的概念更加清晰了。如果我在某个地方错了,请纠正我,基本上对象的键值是按原样取的,即提供的键变量的名称,但因为这里它是在访问索引的符号中,它没有正确地解析它,所以我们使用[]符号来动态分配表达式返回的值,很好,我甚至可以通过它使用一些函数或复杂表达式的返回值作为键。这是迄今为止最简单的版本