首页 > 解决方案 > 通过 JavaScript 中的自定义函数对数组进行排序

问题描述

我只使用 Javascript。

我有以下字符串:

?pn1=age&pn2=name&pv1=12&pv2=alice

我需要做的是有以下结果:

age:12|name:alice

我想到了一种方法来做到这一点,如下:

var str = "?pn1=age&pn2=name&pv1=12&pv2=alice";
var strSplit = str.split("&");
for (var i = 0; i < strSplit.length; i++) { 
   console.log(strSplit[i]);
}

这将返回以下结果:

?pn1=age
pn2=name
pv1=12
pv2=alice

由于我想将pn1pv1以及pn2pv2连接在一起,所以字符串末尾的数字很重要。

?pn 1 =年龄
pn 2 =姓名
pv 1 =12
pv 2 =alice

所以我想一种方法是按这个数字对数组进行排序。然后在排序后将每 2 个值连接在一起。

我尝试了以下代码:

 strSplit.sort(function() {
    var pref = strSplit[i].split('=')[0];
    return pref.charAt(pref.length-1);
});

它似乎不起作用

任何帮助,将不胜感激

标签: javascriptarrayssorting

解决方案


您可以拆分零件,收集所有项目并返回连接的字符串。

var string = '?pn1=age&pn2=name&pv1=12&pv2=alice',
    result = string
        .slice(1)
        .split('&')
        .reduce((r, p) => {
            var [k, value] = p.split('='),
                [key, index] = k.split(/(\d+)/);
            index--;
            r[index] = r[index] || {};
            r[index][key] = value;
            return r;
        }, [])
        .map(({ pn, pv }) => [pn, pv].join(':'))
        .join('|');

console.log(result);


推荐阅读