从反应本机数组中的对象获取密钥

JJN*_*L77 4 javascript reactjs react-native

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);
    });
Run Code Online (Sandbox Code Playgroud)

我在React的返回方法中使用了这个函数。

 {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>
  )}
Run Code Online (Sandbox Code Playgroud)

我有一个问题,我只想要一个特定的值,Object.values(item)给出所有值,当我使用Object.values(item[key])Object.values(item[0])我得到:

TypeError: undefined is not an object (evaluating 'Object.keys(item[0]') 或 TypeError: undefined is not an object (evaluating '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
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题,我只能从中得到一个特定的对象。

<Text>Object.values(item)</Text>
Run Code Online (Sandbox Code Playgroud)

给出:

    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
Run Code Online (Sandbox Code Playgroud)

小智 5

请参考下面的例子...

const obj1 = {
  a: 'hello',
  b: 25,
  c: ['apple', 'mango']
};

console.log(Object.values(obj1));  // Array ['hello', 25, Array ['apple', 'mango']]
console.log(Object.keys(obj1));  // Array ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,
如果你使用 like Object.values(item)// item必须是对象
如果你使用 like Object.values(item[key])// item[key]必须是对象
如果你使用 like Object.values(item[0])// item[0]必须是对象

因此,Object.values()Object.keys()内部的任何内容都必须是对象

soitem[key]item[0]必须
在代码中评估为对象,undefined因此只会发生以下错误

类型错误:未定义不是一个对象(评估 Object.keys(item[key]))
类型错误:未定义不是一个对象(评估 Object.keys(item[0]))

根据您的需要,现在您需要使用以下之一:

  • Object.values(item)[0]Object.values(item)[1](静态)
  • Object.values(item).filter((val,ind) => {})(基于条件)
  • Object.values(item).map((val,ind) => {})(如果你想使用全部)

希望这个详细的解释对您有所帮助。