Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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/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,我要做的是对这些数组的元素进行排序: 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...