如何从javascript中的对象值返回键?

时间:2017-03-19 06:16:51

标签: javascript reactjs object key-value

我在React中有一个对象,我已经映射并想让它进行交互:我想要它,所以当用户点击' X'在元素旁边的按钮,它将console.log指向该被单击元素的键。

这是对象:

var obj = {
  person1: {
    name: 'iggy',
    superPower: 'awesomeness',
    favDonut: 'chocolate'
  },
  person2: {
    name: 'iggy2',
    superPower: 'stupendousness',
    favDonut: 'glazed'
  },
  person3: {
    name: 'iggy3',
    superPower: 'amazingness',
    favDonut: 'chocolate sprinkles'
  }
};

迭代看起来像这样:

X chocolate
X glazed
X chocolate sprinkles

如果我点击glazed上的x,我希望它为console.log person2,因为它是glazed的父对象。如果我点击chocolate sprinkles上的x,我想要它来控制.log person3

这是小提琴:https://jsfiddle.net/iggyfiddle/b9rreoje/2/

我想弄清楚的方法是getPersonName函数。允许用户单击x和console.log相关对象键的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以Object.values而不是Object.keys,这样您就可以访问相应的密钥。

  getPersonName: function(person){
    console.log(person);
  }

const donutValues = Object.keys(obj).map((key, index) => <li key={index}><a href="#" onClick={() => this.getPersonName(key)}>X</a> {obj[key].favDonut} </li>);

更新小提琴:https://jsfiddle.net/b9rreoje/3/

答案 1 :(得分:0)

您需要将onClick设置为使用相应的person对象调用getPersonName的内联函数。

  getPersonName: function(person){
    console.log(person);
  },

  render(){
    const donutValues = Object.values(obj).map((person, index) => <li key={index}><a href="#" onClick={function(){this.getPersonName(person)}.bind(this)}>X</a> {person.favDonut} </li>);
    return (
      <div>
        Hello 
          <ul>
            {donutValues}
          </ul>
          Give me person: {this.state.person}
      </div>
    );
  }

在此处找到更新的jsfiddle:https://jsfiddle.net/8637u8qL/