Javascript 以相同的方式对多个数组进行排序
我要做的是对这些数组的元素进行排序:Javascript 以相同的方式对多个数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我要做的是对这些数组的元素进行排序: name[]; standing[]; value[]; maxvalue[]; id[]; repstring[]; 通过排序数组: var SortArr = [1,2,4,6,3,5,7,8,12,11,10,9...etc] 一直到106,这是这些阵列的长度 此排序数组是一个键,用于以自定义方式(而不是按字母顺序)重新排列数据 什么是有效的方法?我已经尝试将上面的数组组合成一个对象,因为我一直在阅读这可能是最好的方法,但我不知道如何实现。我对ja
name[];
standing[];
value[];
maxvalue[];
id[];
repstring[];
通过排序数组:
var SortArr = [1,2,4,6,3,5,7,8,12,11,10,9...etc]
一直到106,这是这些阵列的长度
此排序数组是一个键,用于以自定义方式(而不是按字母顺序)重新排列数据
什么是有效的方法?我已经尝试将上面的数组组合成一个对象,因为我一直在阅读这可能是最好的方法,但我不知道如何实现。我对javascript和一般的编码非常陌生,所以欢迎使用任何指针。谢谢
下面是我的代码:
}
//...
//this is all within a function called rep()
//Declare things
var name = [ ];
var standing = [ ];
var value = [ ];
var maxvalue = [ ];
var id = [ ];
//For converting repstanding to strings
var reputation = new Array ("Hated", "Hostile", "Unfriendly", "Neutral", "Friendly", "Honored", "Revered", "Exalted");
//array holding converted strings for each faction
var repstring = [ ];
var count = toon.reputation.length; //this value is 106
//Populate arrays
for (i = 0; i < count; i++)
{
name[i] = toon.reputation[i].name; //string
standing[i] = toon.reputation[i].standing; //number from 0-7
value[i] = toon.reputation[i].value; // number from 0-21000
maxvalue[i] = toon.reputation[i].max; //number from 3000-21000
id[i] = toon.reputation[i].id //number from 1-1741
}
//Convert standing numbers to reputation string
for (i=0; i < count; i++)
{
repstring[i] = reputation[standing[i]];
}
//Create output array
var repInfo = new Array(
name, standing, repstring, value, maxvalue, id, SortArr
)
//Output array
return repInfo;
}
好的,我要做的是重新排列这些,以便它们由Sortar排序,所以看起来像这样:
Name Standing Repstring Value MaxValue ID SortArr
Zandalar Tribe 3 Neutral 0 3000 270 1
Booty Bay 3 Neutral 1875 3000 21 2
The Sons of Hodir 0 Hated 0 36000 1119 3
The Oracles 3 Neutral 0 3000 1105 4
The Black Prince 3 Neutral 2800 3000 1359 5
如果我理解正确,您希望在传递给排序的comparator函数中使用SortArray中的数字索引 //指数:01 2 3 4 5 6 //当您看到1时,将其视为0,将其作为比较器函数中数组中的索引 //当您看到2时,将其视为数组中索引的2 var desiredSortOrder=[1,3,2,7,5,4,6]; var-toSort=[1,7,2,3,4,5,6,1,2,3,7,4,5,6]; //映射,其中键是数字,值是上面desiredSortOrder数组中的索引 var mapToIndex={}; desiredSortOrder.ForEachit,index=>mapToIndex[int]=index; toSort.sorta,b=>mapToIndex[a]-mapToIndex[b]; console.logtoSort;
//[1,1,3,3,2,2,7,7,5,5,4,4,6,6]根据您上面所说的,我将做以下操作
var SortArr = [1, 2, 4, 6, 3, 5, 7, 8, 12, 11, 10, 9];
var collatedArray = [];
for (var i = 0; i < SortArr.length; i++) {
index = SortArr[i];
var collated = {
name : name[index],
standing : standing[index],
value : value[index],
maxvalue : maxvalue[index],
id : id[index],
repstring : repstring[index]
}
collatedArray.push(collated);
}
// Do what you want now with this collated array,
// which is an array of the objects you require.
// You can loop through them and access the properties
// via obj.id, obj.repstanding, etc.
如果您需要返回的对象是不可变的,那么修改此代码以从对象中删除公共变量并允许通过getter方法进行访问就足够简单了
你真的应该根据你的模型来考虑,存储一个玩家数组或以上这些东西所代表的任何东西,而不是为特定模型的每个属性存储数组。你可以使用新的索引来创建一个新的数组
var数组=[‘黑王子’、‘霍迪尔之子’、‘战利品湾’、‘赞达拉部落’、‘神谕者’],
排序器=[5,3,2,1,4];
功能排序器{
var结果=[];
foreacha,i.sortOrder.foreacha{
结果[a-1]=数组[i];
};
返回结果;
}
文件。书写;请加上一些例子。很难说你在问什么。显示输入数组和输出数组,并口头描述排序算法。在一天结束时,您必须编写一个函数来比较两个对象并决定谁先来。您可以通过排序数组循环,从中获取值,然后将顶部每个数组中的值拉入一个对象。然后将其存储在数组中。这就是你想在这里做的事吗?如果是这样的话,应该很容易把它写成一个解决方案。你应该考虑使用一个对象数组。我如何将这些数据变成一个对象数组?如前所述,我对javascript非常陌生,无法理解它。如果这是一个更好的方法,我完全赞成。我不确定这是我想做的。我现在添加了一些例子,也许这更有意义。desiredSortOrder听起来不错,但我不理解其余的内容it@Ser3nity我很确定这是你想做的核心。我不打算写一个完整的解决方案,但请随意提出进一步的问题。我不明白,剩下的也没告诉我多少。谢谢你。我想这就是我要找的。他们确实是玩家,或者一次只有一个特定的玩家,这是关于该玩家的所有信息。无论如何,如何输出这些数据?在我的旧版本中,我将所有信息存储在数组中,我创建了一个名为RepInfo的新数组,并返回了这个数组。当我尝试返回时,似乎不起作用。您的所有信息现在都存储在这个新数组中。您可以通过它进行循环,并通过循环索引进行访问。或者你可以只匹配一个玩家id,等等。我会在上面添加一些代码来说明。谢谢,这太完美了。我似乎无法像数组那样在电子表格中以表格的形式输出,但我只需要做更多的读取,只是循环遍历对象,一次输出一个对象,以逗号分隔,或者任何您需要的方式,并直接引用每个属性。不要使用数组存储模型对象的属性。以下内容将帮助您:
var SortArr = [1, 2, 4, 6, 3, 5, 7, 8, 12, 11, 10, 9];
var collatedArray = [];
for (var i = 0; i < SortArr.length; i++) {
index = SortArr[i];
var collated = {
name : name[index],
standing : standing[index],
value : value[index],
maxvalue : maxvalue[index],
id : id[index],
repstring : repstring[index]
}
collatedArray.push(collated);
}
// Do what you want now with this collated array,
// which is an array of the objects you require.
// You can loop through them and access the properties
// via obj.id, obj.repstanding, etc.
function getPlayer(id) {
var player = null;
for (var i = 0; i < collatedArray.length; i++) {
if (collatedArray[i].id == id) {
player = collatedArray[i];
break;
}
}
return player;
}
player.id
player.repstanding
// etc...