我在网上进行的所有挖掘和搜索都没有找到正确的方法来获得所需格式的以下字符串,我当然可以以粗俗的方式连接并实现这一点,但我渴望学习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'}
答案 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));