Javascript 如何从对象数组中获取值?
我有一个react应用程序,使用redux和道具将对象数组放入我的组件中,我正在获取它们。但我无法访问该数组中某个对象内部的特定属性 为此:Javascript 如何从对象数组中获取值?,javascript,arrays,reactjs,object,react-props,Javascript,Arrays,Reactjs,Object,React Props,我有一个react应用程序,使用redux和道具将对象数组放入我的组件中,我正在获取它们。但我无法访问该数组中某个对象内部的特定属性 为此: console.log(this.props.users) 我列出了一个数组,里面有所有的对象。但当我需要访问该对象的特定对象或属性时,例如: console.log(this.props.users[0]) console.log(this.props.users[0].name) 我得到一个错误: Cannot read property '0'
console.log(this.props.users)
我列出了一个数组,里面有所有的对象。但当我需要访问该对象的特定对象或属性时,例如:
console.log(this.props.users[0])
console.log(this.props.users[0].name)
我得到一个错误:
Cannot read property '0' of undefined
但当我使用map()方法遍历数组时,我可以访问它,它就可以工作了。为什么我不能正常访问它?可能是在您执行该行时
此.props.users
未定义。检查添加了console.log(this.props.users[0])
的流程,当您执行该行时,this.props.users
未定义。检查添加了console.log(this.props.users[0])的流程
在加载此.props.users之前,您试图访问其属性。组件在不等待数据获取的情况下呈现。当你console.log(this.props.users)
你说你得到了一个数组,但是在上面,当组件在this.props.users
加载之前呈现时,它可能至少记录一次未定义的
你有两个选择。您可以在render方法的最顶端执行此操作,以防止该方法中的其余代码执行:
if (!this.props.users) return null;
一旦获取了数据并且道具发生了变化,就会再次调用render方法
另一个选项是在reducer中为
用户
声明一个空数组的默认值。您试图在加载this.props.users
之前访问它的属性。组件在不等待数据获取的情况下呈现。当你console.log(this.props.users)
你说你得到了一个数组,但是在上面,当组件在this.props.users
加载之前呈现时,它可能至少记录一次未定义的
const App = () => {
const example = () => {
const data =[{id:1 ,name: "Users1", description: "desc1"},
{id:2 ,name: "Users2", description: "desc2"}];
return (
<div>
{data.map(function(cValue, idx){
console.log("currentValue.id:",cValue.id);
console.log("currentValue.name:",cValue.name);
console.log("currentValue.description:",cValue.description);
return (<li key={idx}>name = {cValue.name} description = {cValue.description}</li>)
})}
</div>
);
}
return(
<p style = {{color:'white'}}>
{example()}
</p>
);
}
export default App;
你有两个选择。您可以在render方法的最顶端执行此操作,以防止该方法中的其余代码执行:
if (!this.props.users) return null;
一旦获取了数据并且道具发生了变化,就会再次调用render方法
另一个选项是为reducer中的用户
声明空数组的默认值。const-App=()=>{
const App = () => {
const example = () => {
const data =[{id:1 ,name: "Users1", description: "desc1"},
{id:2 ,name: "Users2", description: "desc2"}];
return (
<div>
{data.map(function(cValue, idx){
console.log("currentValue.id:",cValue.id);
console.log("currentValue.name:",cValue.name);
console.log("currentValue.description:",cValue.description);
return (<li key={idx}>name = {cValue.name} description = {cValue.description}</li>)
})}
</div>
);
}
return(
<p style = {{color:'white'}}>
{example()}
</p>
);
}
export default App;
常量示例=()=>{
const data=[{id:1,名称:“Users1”,说明:“desc1”},
{id:2,名称:“Users2”,描述:“desc2”}];
返回(
{data.map(函数(cValue,idx){
log(“currentValue.id:”,cValue.id);
log(“currentValue.name:”,cValue.name);
日志(“currentValue.description:”,cvvalue.description);
返回(name={cValue.name}description={cValue.description} )
})}
);
}
返回(
{example()}
);
}
导出默认应用程序;
const-App=()=>{
常量示例=()=>{
const data=[{id:1,名称:“Users1”,说明:“desc1”},
{id:2,名称:“Users2”,描述:“desc2”}];
返回(
{data.map(函数(cValue,idx){
log(“currentValue.id:”,cValue.id);
log(“currentValue.name:”,cValue.name);
日志(“currentValue.description:”,cvvalue.description);
返回(name={cValue.name}description={cValue.description} )
})}
);
}
返回(
{example()}
);
}
导出默认应用程序;
请发布第一个控制台状态的控制台输出。您的对象数组是什么样子的?您能给我们展示一下用户的对象结构吗?console.log(this.props.users)显示了什么?您可能没有正确地将组件连接到存储,或者如果props.users
是异步加载的,您可能试图访问尚未加载的数组中的条目。发布您的组件代码。请发布第一个控制台状态的控制台输出。您的对象数组是什么样子的?能否向我们展示用户对象结构?console.log(this.props.users)show是什么?您可能没有将组件正确连接到存储区,或者,如果异步加载了props.users
,则您可能试图访问尚未加载的数组中的条目。发布您的组件代码。但在同一点上,我可以用console.log(this.props.users)在console中列出整个数组@bobby您可以访问this.props.users.length
?@Bergi否我不能t@bobby你能console.log(JSON.stringify(this.props.users))
?我的猜测是,你的控制台日志实际上并不是来自你所认为的那一行came@bergi我这样做了,并在控制台中得到了结果…max有一个正确的答案,但在同一点上,我可以用console.log(this.props.users)在控制台中列出整个数组@bobby你能访问这个.props.users.length吗?@Bergi不行t@bobby你能console.log(JSON.stringify(this.props.users))
?我的猜测是,你的控制台日志实际上并不是来自你所认为的那一行came@bergi我这样做了,我在控制台中得到了结果…max有一个正确的答案我在reducer中有一个空数组,它也不工作,但第一个选项是你们说的works@bobby如果是这样的话,在获取用户之前,您可能会在某个位置覆盖用户的默认值。如何声明对象数组的默认值?如果我只是将arrayofObjects=[],当应用程序第一次呈现arrayofObjects.object.someProperty时,它将抛出一个错误,即它无法读取undefinedIt的属性很难定义嵌套很深的默认值。在这种情况下,从lodash获取\是一个很好的解决方案<代码>\uu0.get(arrayOfObjects,'object.someProperty','banana')