Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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按索引对数组重新排序_Javascript_Arrays_Sorting - Fatal编程技术网

使用javascript按索引对数组重新排序

使用javascript按索引对数组重新排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个数组,我正在尝试根据另一个数组重新排序此数组。第二个数组是索引数组(见下文)。我希望构建一个干净的函数来获取两个参数(一个数组和一个索引数组),并返回重新排序的数组。我已经尝试构建这个函数,下面有一个例子,但是它没有返回我所期望的结果。非常感谢您的帮助 var before = ["T", "T", "A", "T", "T", "T", "T", "T", "A", "T", "T","T", "W", "W", "W", "W", "T", "T", "T", "T", "T", "

我有一个数组,我正在尝试根据另一个数组重新排序此数组。第二个数组是索引数组(见下文)。我希望构建一个干净的函数来获取两个参数(一个数组和一个索引数组),并返回重新排序的数组。我已经尝试构建这个函数,下面有一个例子,但是它没有返回我所期望的结果。非常感谢您的帮助

var before = ["T", "T", "A", "T", "T", "T", "T", "T", "A", "T", "T","T", "W", "W", "W", "W", "T", "T", "T", "T", "T", "W", "T"];
var indexes = [8, 2, 11, 22, 0, 4, 5, 18, 6, 17, 16, 19, 7, 3, 20, 1, 10, 9, 14, 13, 21, 12, 15];

// Attempt
function reorderArray(arrayToOrder ,order){
    // Get a copy of the array we want to change
    var temp = arrayToOrder
    // loop through the indexes
    // use the indexes to place the items in the right place from the copy into the original
    for(let i = 0; i < arrayToOrder.length; i++) {
        console.log("arr: ", arrayToOrder[order[i]] );
        console.log("temp: ", temp[i] );
        arrayToOrder[order[i]] = temp[i];
    }
    return arrayToOrder;
}
// run function
reorderArray( before, indexes );

// function should return this array
var after = ["A", "A", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "T", "W", "W", "W", "W", "W"];
var之前=[“T”、“T”、“A”、“T”、“T”、“T”、“T”、“T”、“A”、“T”、“T”、“T”、“T”、“T”、“W”、“W”、“W”、“T”、“T”、“T”、“W”、“T”、“T”、“W”、“T”];
var指数=[8,2,11,22,0,4,5,18,6,17,16,19,7,3,20,1,10,9,14,13,21,12,15];
//企图
函数REORDERARY(ARRAYTORDER,order){
//获取要更改的阵列的副本
var temp=阵列顺序
//循环遍历索引
//使用索引将项目从副本放置到原件的正确位置
for(设i=0;i
使用
Array.map()
迭代
索引
,并从
数组之前的
返回值:

const before=[“T”、“T”、“A”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“W”、“W”、“W”、“W”、“W”、“W”、“W”、“W”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“T”、“;
常数指数=[8,2,11,22,0,4,5,18,6,17,16,19,7,3,20,1,10,9,14,13,21,12,15];
const reorderbyindex=(arr,order)=>order.map((index)=>arr[index]);
const after=重新排序索引(before,index);

console.log(在.join()之后)您可以使用
Array.prototype.map

var之前=[“T”、“T”、“A”、“T”、“T”、“T”、“T”、“T”、“A”、“T”、“T”、“T”、“T”、“T”、“W”、“W”、“W”、“T”、“T”、“T”、“W”、“T”、“T”、“W”、“T”];
var指数=[8,2,11,22,0,4,5,18,6,17,16,19,7,3,20,1,10,9,14,13,21,12,15];
var输出=index.map(i=>before[i]);

控制台日志(输出)或forEach

var之前=[“T”、“T”、“A”、“T”、“T”、“T”、“T”、“T”、“A”、“T”、“T”、“T”、“T”、“T”、“W”、“W”、“W”、“T”、“T”、“T”、“W”、“T”、“T”、“W”、“T”];
var指数=[8,2,11,22,0,4,5,18,6,17,16,19,7,3,20,1,10,9,14,13,21,12,15];
var后=[];
forEach(函数(值,索引){
在[索引]之后=在[值]之前
})

console.log(after)
请注意,复制对象的引用(数组也是对象)不会创建副本。它实际上创建了对同一对象的另一个引用。您确定结果吗?
之后的
看起来像alpha排序,而不是其他数组列表的索引。这应该是一个技巧性的问题:)这个问题需要重新命名、改写或更正,示例代码展示了如何根据“秩”对数组重新排序,因为它使用了类似于
arrayToOrder[rank[i]=temp[i]的东西。如果根据“索引”对数组重新排序,则代码的关键行是
arrayToOrder[i]=temp[index[i]]。我不知道哪种情况更常见,但其中一个例子是根据另一个数组将索引数组0排序为length-1,在这种情况下,根据索引进行重新排序。您可以将索引转换为秩:
rank[index[i]]=i或反之亦然
索引[秩[i]]=i。正是我想要的,谢谢!