我正在尝试与processmaker的API进行交互。 我已经制作了一个简单的表单来进行身份验证并获取授权令牌,与其他API进行交互时需要使用该令牌。
登录后,我可以使用令牌输出已创建项目的json响应。响应是一个对象数组。
我需要获取Modal
的api请求,以便提取这些内容,但是使用map运气不佳。
如何遍历响应并为数组中的每个对象获取prj_uid
和prj_name
?
prj_uid
字符串化响应:
import React, { useState, useEffect } from "react";
//import ResponsiveEmbed from "react-responsive-embed";
const Tasks = ({ loggedIn }) => {
const [hasError, setErrors] = useState(false);
const [projects, setProjects] = useState([]);
const url = "http://127.0.0.1:8080/api/1.0/workflow/project";
useEffect(() => {
let access_token = sessionStorage.getItem("access_token");
async function fetchData() {
const response = await fetch(url, {
method: "GET",
withCredentials: true,
timeout: 1000,
headers: {
Authorization: "Bearer " + access_token
}
});
response
.json()
.then(response => setProjects(response))
.catch(err => setErrors(err));
}
fetchData();
}, [loggedIn]);
console.log(JSON.stringify(loggedIn) + " logged in, displaying projects");
console.log(projects + " projects");
if (!loggedIn) {
return <h1>Error</h1>;
} else {
return (
<>
<p>Login success!</p>
<h2>Projects:</h2>
<span>{JSON.stringify(projects)}</span>
<div>Has error: {JSON.stringify(hasError)}</div>
</>
);
}
};
export default Tasks;
答案 0 :(得分:1)
Array.map()
是您的答案-您说对了。
它非常简单:
let mappedObject = result.map( el => ({ prj_name, prj_uid }) );
el
是数组中的每个元素,我们使用仅包含prj_name
和prj_uid
的对象构造新数组。因为el
alraeady具有带有这些名称的那些属性,所以在构造新对象时我们不需要编写{ prj_name: el.prj_name }
,这意味着它会隐含,并且只会使用那里的属性名称来解决问题。
mappedObject现在将保存仅由所要求的属性组成的对象数组。
您可能想了解有关地图的更多信息,以便更好地理解地图-Array.map()
答案 1 :(得分:0)
如果loggedIn
是json对象,则可以执行以下操作:
const uidNameArr = loggedIn.map((item) => { // returns an array of arrays with the values you want.
return [item.prj_uid, item.prj_name]
})
uidNameArr.forEach(([uid,name]) => {
console.log(`${name} has a uid of ${uid}`)
})