从本机数组中的对象获取键

时间:2019-05-16 10:20:43

标签: 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);
    });

我在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

3 个答案:

答案 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'