constructor(props) {
super(props);
this.state = ({
childData: [],
test: []
});
}
componentDidMount() {
let userId = firebase.auth().currentUser.uid;
firebase.database().ref('poolog/' + userId).on('value', (snapshot) => {
let test = [];
snapshot.forEach((childSnapshot) => {
let childKey = childSnapshot.key;
test.push(snapshot.val());
});
this.setState({childData: test});
// console.log(this.state.childData);
});
我在React的return方法中使用此函数。
{this.state.childData.map((item, key) =>
<View key={key}>
{console.log(Object.values(item) + 'test')}
<Text>{Object.keys(item)}</Text>
{Object.values(item).map((value, index) =>
<View></View>
)}
</View>
)}
我有一个问题,我只想要一个特定的值,Object.values(item)
给出所有值,当我使用Object.values(item[key])
或Object.values(item[0])
时,我得到:
TypeError:未定义不是对象(正在评估“ Object.keys(item [0]”)) 要么 TypeError:未定义不是对象(正在评估'Object.keys(item [key]')'
{console.log(Object.values(item) + 'test')}
给出以下输出:
[object Object],[object Object],[object Object],[object Object]test
[object Object],[object Object],[object Object],[object Object]test
[object Object],[object Object],[object Object],[object Object]test
[object Object],[object Object],[object Object],[object Object]test
我该如何解决,只能从中获得特定对象。
<Text>Object.values(item)</Text>
给予:
10-1-201910-5-2019-10-9-2019-9-5-2019
10-1-201910-5-2019-10-9-2019-9-5-2019
10-1-201910-5-2019-10-9-2019-9-5-2019
10-1-201910-5-2019-10-9-2019-9-5-2019
答案 0 :(得分:0)
请参阅以下示例...
const obj1 = {
一个:“你好”,
b:25,
c:['apple','mango']
};
console.log(Object.values(obj1)); // Array ['hello',25,Array ['apple','mango']]
console.log(Object.keys(obj1)); //数组['a','b','c']
所以就您而言,
如果您使用类似Object.values(item)
// // 项目必须是对象
如果您使用类似Object.values(item[key])
// // item [key] 必须是对象
如果您使用Object.values(item[0])
// // item [0] 必须是对象
因此 Object.values()或 Object.keys()中的任何内容都必须是 object
因此必须将item[key]
或item[0]
评估为对象
在您的代码中,其计算结果为undefined
,因此只有以下错误发生
TypeError:未定义不是对象(正在评估Object.keys(item [key]))
TypeError:未定义不是对象(正在评估Object.keys(item [0]))
根据您的需要,现在您需要像以下方式之一使用
:Object.values(item)[0]
或Object.values(item)[1]
(静态)Object.values(item).filter((val,ind) => {})
(基于条件)Object.values(item).map((val,ind) => {})
(如果您想全部使用)希望这个详细的说明对您有所帮助。
答案 1 :(得分:0)
您可以使用object.keys获取特定对象的键
Object.keys()方法返回给定对象自己的属性名称的数组,其顺序与我们在普通循环中获得的顺序相同。
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
// expected output: Array ["a", "b", "c"]
答案 2 :(得分:0)
我建议您使用lodash:https://lodash.com/docs/4.17.11#get
const obj1 = {
a: 'hello',
b: 25,
c: ['apple', 'mango']
};
_.get(obj1, 'a');
// => 'hello'
_.get(obj1, 'c[0]');
// => 'apple'
_.get(obj1, 'a.b.c', 'default');
// => 'default'