Javascript 如何获取作为对象数组一部分的对象内部的数组的值?
在我的组件willmount中,我有一个函数,在当前用户的文档中调用“购物车”字段 此购物车字段是一个对象数组,每个对象都有一个包含图像URL数组的字段 我的问题是,我在组件的状态中声明了所需的变量“shoppingCart”,然后在componentWillMount中,我将该值分配给返回的对象数组(shoppingCart对象) 当我测试是否可以获取其中一个对象中数组的第一个链接时,程序会抱怨字段未定义,并继续崩溃。我注意到,根据我如何声明我的状态变量,我可以从这些对象获取更多或更少的信息 例如: 如果我这样声明我的状态变量:Javascript 如何获取作为对象数组一部分的对象内部的数组的值?,javascript,reactjs,firebase,Javascript,Reactjs,Firebase,在我的组件willmount中,我有一个函数,在当前用户的文档中调用“购物车”字段 此购物车字段是一个对象数组,每个对象都有一个包含图像URL数组的字段 我的问题是,我在组件的状态中声明了所需的变量“shoppingCart”,然后在componentWillMount中,我将该值分配给返回的对象数组(shoppingCart对象) 当我测试是否可以获取其中一个对象中数组的第一个链接时,程序会抱怨字段未定义,并继续崩溃。我注意到,根据我如何声明我的状态变量,我可以从这些对象获取更多或更少的信息
this.state={
shoppingCart:"",
}
this.state={
shoppingCart:[{}],
}
那么我只能到达shoppingCart[n]中的对象
但如果我这样宣布我的状态:
this.state={
shoppingCart:"",
}
this.state={
shoppingCart:[{}],
}
我可以进入我选择的对象的字段,例如:
shoppingCart[n].name;
shoppingCart[n].url[n]
但在尝试获取对象内部数组的某个值时,例如:
shoppingCart[n].name;
shoppingCart[n].url[n]
这是不可能的
我必须以某种方式声明状态变量吗
export const getCartItems = (props) => {
return (dispatch, getState, { getFirebase, getFirestore }) => {
const firebase = getFirebase();
const firestore = getFirestore();
const storage = firebase.storage();
return
firestore.collection('users').doc(props.auth.uid).get().then((user)=>{
return user.data().shoppingCart;
})
}
}
constructor(props) {
super(props)
this.state = {
shoppingCart: [{}],
}
}
componentWillMount() {
if (this.props.auth.uid) {
this.props.getCartItems(this.props).then((shoppingCart) => {
this.setState({
shoppingCart,
})
})
}
}
当您将初始状态声明为
{shoppingCart:[{}]}
时,您的意思是加载一个没有字段的购物车。如果您试图访问空对象的url,您将得到未定义的。如果尝试访问undefined的第n个元素,则会出现运行时错误
在您调用promise之后,在您的响应加载到状态之前还有一段时间。在这段时间内,您的初始状态需要防止访问上述未定义字段的情况
两个可行的选择是:
this.state = { shoppingCart: [] };
或
最后,另一个解决方案涉及没有默认状态,但每次引用状态时都有一个条件引用。这是一个非常好的方法,可以访问内部数组,问题出在哪里?“…shoppingCart[n].url[n]
这是不可能的。”为什么不呢?当你尝试时会发生什么?url
属性真的是数组吗?您真的希望shoppingCard
数组和url
数组中的索引相同吗?另外,请展示您正在使用的对象和数组的示例。您是否在每个购物车中存储URL数组?请尝试shoppingCart[n].url最有可能的是n
th购物卡的n
th url不存在。为什么您希望这两个索引相同?因此“n”值只是一个示例,url的索引和当前项的索引可能不同您只是在猜测,我们不知道从getCartItems()返回的数据的结构是什么
我们不知道OP试图以他/她描述的方式访问数据的位置/方式。因此,数据的顺序大致如下:[{名称、描述、价格、url[link1、link2、link3]},{此处相同},{此处相同}。显然,数组的大小取决于购物车中有多少项@YannickKI可以访问promise变量中的数据,但是当我将值赋给state变量时,我无法浏览其字段,再一次,我认为这是因为state和promise变量在结构上是不同的。你是没有定义还是类型错误?@PeterCheng你的答案有效,我想我也必须在state变量中定义字段?谢谢你的帮助!只是想澄清一下,这是第二次