Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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 如何从JSON API调用遍历子对象_Javascript_Arrays_Json_Reactjs_Key - Fatal编程技术网

Javascript 如何从JSON API调用遍历子对象

Javascript 如何从JSON API调用遍历子对象,javascript,arrays,json,reactjs,key,Javascript,Arrays,Json,Reactjs,Key,我是一个初学者,尝试通过API调用中的子对象进行迭代,以从键值对中获取键。因此,从我下面的状态示例中,我希望能够打印“id”、“姓名”和“电子邮件”(并最终使用它们填充ReactTable中的“标题”和“访问者”,以自动生成我的列。这可能超出了我现在的问题范围) “我的所有对象”的键都相同(例如id、名称、电子邮件)。但是,我只能获取数据中每个子对象的父键。在我的例子中,父键恰好是数组中对象的索引值。因此,对于如上所示的4个对象,my console.log输出将只是一个[“0”、“1”、“2”

我是一个初学者,尝试通过API调用中的子对象进行迭代,以从键值对中获取键。因此,从我下面的状态示例中,我希望能够打印“id”、“姓名”和“电子邮件”(并最终使用它们填充ReactTable中的“标题”和“访问者”,以自动生成我的列。这可能超出了我现在的问题范围)

“我的所有对象”的键都相同(例如id、名称、电子邮件)。但是,我只能获取数据中每个子对象的父键。在我的例子中,父键恰好是数组中对象的索引值。因此,对于如上所示的4个对象,my console.log输出将只是一个[“0”、“1”、“2”、“3”]的数组,因为有4个对象。相反,我想获得[“id”、“姓名”、“电子邮件”]。我的代码如下。我愿意添加另一个嵌套循环来访问子组件,但无论我做什么都会破坏代码

getKeys = () => {
        var keysArr = []
        var i;
        for (i = 0; i < 1; i++) { // i < 1 because I only need to access the keys from a single object
            keysArr.push(Object.keys(this.props.data.children)); // The '.children' breaks my code but it is to show that I would like to access the child objects          
        }
        console.log(keysArr)
    }
getKeys=()=>{
var keysArr=[]
var i;
对于(i=0;i<1;i++){//i<1,因为我只需要从单个对象访问密钥
keysArr.push(Object.keys(this.props.data.children));//这个“.children”破坏了我的代码,但它是为了表示我想访问子对象
}
console.log(keysArr)
}

任何帮助编辑我的代码,或建议一个新的方法将不胜感激

您不需要for循环。只需更改您的:

keysArr.push(Object.keys(this.props.data.children));

您只能通过以下方式直接访问密钥:

keysArr = Object.keys(this.props.data[0])
您的函数应该如下所示:

var状态={
数据:[
{“id”:1,
“姓名”:“约翰”,
“电子邮件”:john@test.com"
},
{“id”:2,
“姓名”:“亚历克斯”,
“电子邮件”:alex@test.com"
},
{“id”:3,
“姓名”:“山姆”,
“电子邮件”:sam@test.com"
},
{“id”:4,
“姓名”:“杰西”,
“电子邮件”:Jess@test.com"
}
]
}
getKeys=()=>{
var keysArr=[]
var i;
keysArr=Object.keys(state.data[0]);
console.log(keysArr)
}

getKeys()像这样的东西怎么样

const yourSet = new Set();
data.forEach(obj => Object.keys(obj).forEach(k => yourSet.add(k)))

这将遍历数组中的每个键。因此,如果对象是不同的数组,则将拾取所有键。

谢谢您的帮助。这似乎是工作。然而,我遇到了一个不寻常的怪癖。因为我从API调用中获取数据,所以我将“数据”初始化为空数组。当我这样做并使用您展示的代码时,我似乎得到了“uncaughttypeerror:无法将未定义或null转换为object”。但是,如果我用一些预定义的数据初始化数据数组(如在我的原始帖子中),然后执行API调用来覆盖数据,那么它似乎工作得非常好。我怀疑在数组中存在任何数据之前调用了getKeys()函数。有什么解决方案吗?Hi@purelife,您可以查找触发getKeys()的事件,然后仅在实际存在prop对象时调用它。例如添加if(this.prop&&this.prop.data)或类似的内容。
keysArr = Object.keys(this.props.data[0])
const yourSet = new Set();
data.forEach(obj => Object.keys(obj).forEach(k => yourSet.add(k)))