Javascript(node.js)数组到特定的字符串格式(类似于JSON)

时间:2018-06-06 09:15:12

标签: javascript arrays json string

我在网上进行的所有挖掘和搜索都没有找到正确的方法来获得所需格式的以下字符串,我当然可以以粗俗的方式连接并实现这一点,但我渴望学习Javascript + JSON。我在node.js中使用字符串表示基本身份验证。

我需要构建以下字符串(仅在花括号内部):

app.use(basicAuth(...
  users: { 'admin': 'adminpass' , 'user':'userpass'},.....

从数据库中获取数据的代码:

connection.query('SELECT * FROM wts_users', function (error, results, fields) {
  if (error) throw error;
  for (var i = 0; i < results.length; i++) {
    var result = results[i];
    userList.push(result.user_name, result.user_password)
  }
  console.log("user list: "+JSON.stringify(userList));
});

我得到的结果:

["admin","adminpass","user","userpass"]

如何以下列格式获得结果。

{ 'admin': 'adminpass' , 'user':'userpass'}

3 个答案:

答案 0 :(得分:3)

userList 应该是一个对象

userList = {};
userList[result.user_name] = result.user_password;

或者,您可以使用 Array.reduce

let results = [{user_name: "admin", user_password : "adminpass"}, {user_name: "user", user_password : "userpass"}]

let userList = results.reduce((o, {user_name, user_password}) => Object.assign(o, {[user_name] : user_password}), {});

console.log("user list: "+JSON.stringify(userList));

答案 1 :(得分:1)

这是使用reduce的适当时间:

const userList = results.reduce((a, { user_name, user_password }) => {
  a[user_name] = user_password;
  return a;
}, {});

答案 2 :(得分:1)

使用userList作为对象是正确的方法。但是如果你已经拥有一个数组并且必须将它转换为一个对象,那么将2个元素取为2,你可以使用这个函数:

function toObject(arr) {
  var obj = {};
  for (var i = 0; i < arr.length; i+=2)
    obj[arr[i]] = arr[i+1];
  return obj;
}

<强>演示

let result = ["admin","adminpass","user","userpass"]

function toObject(arr) {
  var obj = {};
  for (var i = 0; i < arr.length; i+=2)
    obj[arr[i]] = arr[i+1];
  return obj;
}

console.log(toObject(result));