繁体   English   中英

如何根据另一个数组的排序方式对一个数组进行排序? (JavaScript)的

[英]How to sort one array based on how another gets sorted? (Javascript)

我必须创建一个函数来根据每个数字的“权重”对一串数字进行排序 - “权重”是加在一起的数字的数字(99的权重为18,权重为100将是1等等)。 这意味着字符串"100 54 32 62"将返回"100 32 62 54"

我可以使用以下方法获得这些数字的权重数组:

function orderWeight(str) {
    var arr = str.split(" ");
    var sortArr = [];
    arr.forEach(t => sortArr.push(t.split("").map(s => parseInt(s, 10)).reduce(add, 0)));
}

其中add只是一个通用的附加功能。 对于上面的例子, sortArr将是[1, 9, 5, 8] sortArr [1, 9, 5, 8]

根据数字权重sortArr的新数组如何排序,从字符串arr中对原始数字数组进行排序的最佳方法是什么?

谢谢!

这应该做的伎俩:

var x = '100 54 32 62';

function orderWeight(str) {
  return str.split(' ').sort(function(a, b) {
    return (a.split('').reduce(function(p, c) { return +p + +c; })) > (b.split('').reduce(function(p, c) { return +p + +c; }));
  }).join(' ');
}

var result = orderWeight(x);

输出:

100 32 62 54

更新:

根据Sterling的建议,这里是用lambda格式编写的相同函数。

var x = '100 54 32 62';

function orderWeight(str) {
  return str.split(' ').sort((a, b) => a.split('').reduce((p, c) => +p + +c) > b.split('').reduce((p, c) => +p + +c)).join(' ');
}

var result = orderWeight(x);

注意:这是我第一次使用lambda语法编写Javascript。 感谢Sterling的建议。

使用地图排序的解决方案。

 function sort(string) { var array = string.split(' '), mapped = array.map(function (a, i) { return { index: i, value: +a.split('').reduce(function (a, b) { return +a + +b; }) }; }); return mapped.sort(function (a, b) { return a.value - b.value; }).map(function (a) { return array[a.index]; }).join(' '); } document.write('<pre>' + JSON.stringify(sort('100 54 32 62'), 0, 4) + '</pre>'); 

我将有一个索引数组(0..n-1)并根据权重数组对其进行排序(通过传递一个比较函数来比较给定索引值的权重)。 然后你将有一个索引数组,显示每个项目应该在哪里(在你的例子中,索引数组将是[0,2,3,1],这意味着arr [0]应该是第一个,然后是arr [2]现在你可以使用索引数组构建排序数组,例如[arr [0],arr [2],arr [3],arr [1]]。所以回顾一下:获取输入数组,计算权重数组,创建索引数组0..n-1,根据权重数组对其进行排序,最后根据排序的索引数组构造输出数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM