从 Node.js 中的两个 JavaScript 对象对查询字符串中的参数进行排序

Sorted parameters in query string from two JavaScript object in Node.js

本文关键字:字符串 查询 参数 排序 对象 两个 js Node JavaScript      更新时间:2023-09-26

使用 querystringqs 等从两个 JavaScript 对象接收排序参数查询字符串的最佳方法是什么?

我正在将属性从 obj2 添加到 obj1:

for (var attrname in obj2) { obj1[attrname] = obj2[attrname]; }

obj1最终会得到一堆属性。

stringify obj1后,我需要查询字符串中的所有参数按键的字母顺序排序:

a=v1&b=v2&c=v3

由于对象属性无法排序(它们的顺序未指定),因此需要将它们放在数组中。

您可以创建一个处理键值对的对象:

function KeyValue(key, value) {
  this.key = key;
  this.value = value;
}
KeyValue.prototype = {
  toString: function() {
    return encodeURIComponent(this.key) + '=' + encodeURIComponent(this.value);
  }
};

通过从对象中的属性创建 KeyValue 对象的数组,然后可以按键对它们进行排序,只需使用 join 即可创建查询字符串:

var obj1 = { x: '1 2 3', b: 42, f: 'x<y' };
var query = [];
for (var key in obj1) {
    if (obj1.hasOwnProperty(key)) {
        query.push(new KeyValue(key, obj1[key]));
    }
}
query.sort(function(a, b){ return a.key < b.key ? -1 : 1 });
var queryString = query.join('&');

变量queryString现在包含 b=42&f=x%3Cy&x=1%202%203

演示:http://jsfiddle.net/915wt4j4/