JavaScript将对象转换为Url拼接参数

将对象转换为Url拼接参数

const obj2str = obj => {
  let arr = Object.entries(obj);
  arr.forEach((value, index) => {
    arr[index] = value.join('=');
  });
  return arr.join('&');
};

实例:

var data  = { "name": "jie", "age" : 20 };
console.log(obj2str(data)); //output: name=jie&age=20

扩展

1、 Object.entries()方法返回一个给定对象自身可枚举属性的键值对数组。

var data  = { "name": "jie", "age" : 20 };
console.log(Object.entries(data)); 
//output: [['name','jie'], ['age', 20]]

for (const [key, value] of Object.entries(data)) {
  console.log(`${key}: ${value}`);
}
// output:
// name: jie
// age: 20

Object.entries()的Polyfill

if (!Object.entries) {
  Object.entries = function (obj) {
    let ownProps = Object.keys(obj),
      len = ownProps.length,
      resArray = new Array(len); // preallocate the Array
    while (len--) {
      resArray[len] = [ownProps[len], obj[ownProps[len]]];
    }

    return resArray;
  };
}

2、Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组。

var data  = { "name": "jie", "age" : 20 };
console.log(Object.keys(data)); //output: ['name','age']

3、Object.values()方法会返回一个由一个给定对象的自身可枚举属性值组成的数组。

var data  = { "name": "jie", "age" : 20 };
console.log(Object.values(data)); //output: ['jie',20]

Object.values()的Polyfill

if (!Object.values) {
  Object.values = function (obj) {
    if (obj !== Object(obj))
      throw new TypeError("Object.values called on a non-object");
    const values = [];
    for (let key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        values.push(obj[key]);
      }
    }
    return values;
  };
}