Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象上的映射返回false_Javascript_Reactjs - Fatal编程技术网

Javascript 对象上的映射返回false

Javascript 对象上的映射返回false,javascript,reactjs,Javascript,Reactjs,我正在调用一个动态api来返回一些值,这个调用返回一个Json,如下所示: {name:“test”,resource_group:“group1”,location:“westeurope”,disk_size:“30GB”,os_type:“Linux”,…} let url const [MachinesRow, setMachinesRow] = React.useState([]) React.useEffect(() => { resource_group.forEach((k

我正在调用一个动态api来返回一些值,这个调用返回一个Json,如下所示:

{name:“test”,resource_group:“group1”,location:“westeurope”,disk_size:“30GB”,os_type:“Linux”,…}

let url
const [MachinesRow, setMachinesRow] = React.useState([])
React.useEffect(() => {
resource_group.forEach((keyword, index) => {
 url = "/api/machine/" + keyword + "/" + name[index]
 fetch(url, {
   method: "GET",
   headers: {
     "Content-Type": "application/json",
     Authorization: "Bearer " + window.localStorage.getItem("access_token"),
   },
 })
.then(resp => {
        return resp.json()
      })
   .then(data => {
     setMachinesRow(data)
   })
   .catch(error => {
    console.log(error)
     window.localStorage.removeItem("access_token")
     window.location.replace("/")
    })

 })
}, [])

如果我执行
{console.log(MachinesRow)}
操作,我会得到一个空数组和3个对象,这个空数组是因为在得到对象之前,如果不得到未定义的值,我就找不到另一个解决方案来得到对象,但是当我试图像这样映射它们以获得名称时,例如:

const d = MachinesRow.length > 0 && MachinesRow.map((row)=>{
         return (row.name);

     });
然后执行
{console.log(d)}
我得到:


这将返回false作为值,我不知道为什么,我试图搜索,但没有找到类似的问题。

您获得的数据是
资源组
数组中项目数的两倍,因此您在每次迭代中都将新数据设置为您的状态。您正在将正确的初始数据设置为您的状态。然后你试图把你的数据放在一起,结果失败了。这可能会有所帮助,因此:

   .then(data => {
     setMachinesRow([...MachinesRow, ...[data]])
   })

将从您的所有请求中收集数据。然后,您可以将
MachinesRow
映射为对象数组。

如果
MachinesRow.length==0
,则
和&
将短路并返回初始化
d
的整个表达式的
false
。再说一遍,你想在那里实现什么?我想映射Json对象。我试图创建一个返回值的常量,只是想看看它的console.log是什么,但我想要的是映射所有对象,但是如果我不执行`MachinesRow.length>0`我将在获取对象之前获取未定义的返回值,然后当我尝试映射它们时,我将得到一个错误,即无法映射未定义的值。不过,除了初始值设定项表达式之外,还有其他地方可以进行该检查。就像一个if声明。抱歉是我的错,它现在起作用了,谢谢。有任何方法可以只返回数据,而不返回第一个空数组,因为如果不将
React.useState([])
设置为空数组,则第一个响应将是未定义的