Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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 - Fatal编程技术网

是否有有效的方法添加数组元素';在JavaScript中按另一个属性排序时,是否将原始索引值作为属性?

是否有有效的方法添加数组元素';在JavaScript中按另一个属性排序时,是否将原始索引值作为属性?,javascript,arrays,Javascript,Arrays,AI有一个数组,我正在按标题属性排序: theArray.sort(function(a, b) { var titleA = a.title.toLowerCase(); var titleB = b.title.toLowerCase(); return (titleA < titleB) ? -1 : (titleA > titleB) ? 1 : 0; }); theArray.sort(函数(a,b){ va

AI有一个数组,我正在按标题属性排序:

    theArray.sort(function(a, b) {
        var titleA = a.title.toLowerCase();
        var titleB = b.title.toLowerCase();
        return (titleA < titleB) ? -1 : (titleA > titleB) ? 1 : 0;
    });
theArray.sort(函数(a,b){
var titleA=a.title.toLowerCase();
var titleB=b.title.toLowerCase();
返回值(titleAtitleB)?1:0;
});
这很好,但除了获得排序数组外,我还希望保留原始数组索引值以用于其他目的(它们指向另一个数组)。我想将其作为property.idx存储在数组的每个元素中

当然,我可以在排序之前简单地添加该属性,方法如下:

for (var i=0; i<theArray.length; i++) {theArray.index = i);

for(var i=0;i排序时创建一个新数组,使用排列将有助于:

const newArray = [...theArray].sort(function(a, b) {
  var titleA = a.title.toLowerCase();
  var titleB = b.title.toLowerCase();
  return (titleA < titleB) ? -1 : (titleA > titleB) ? 1 : 0;
});
const newArray=[…theArray].sort(函数(a,b){
var titleA=a.title.toLowerCase();
var titleB=b.title.toLowerCase();
返回值(titleAtitleB)?1:0;
});

您可以对标记数组进行排序,而不是对原始数组进行排序:


然后,当你需要对“排序”数组做一些事情时,迭代索引并访问
theArray[i]
。当你需要对排序的索引做一些事情时,只需迭代
索引
数组。

有趣的想法。我会测试。谢谢。
const getTitle = i => theArray[i].title.toLowerCase();
const indicies = theArray.map((_, i) => i);
indicies.sort((indA, indB) => getTitle(indB).localeCompare(getTitle(indA)));