代码之家  ›  专栏  ›  技术社区  ›  Francis

可能用链式符号替换Object.keys(myObj)?

  •  0
  • Francis  · 技术社区  · 6 年前

    :如果你想和我一样,你可能会犯同样的错误,请看下面我自己的答案。。。

    原来的问题是:

    而不是

    Object.keys(myObj).map(...)
    

    我想写一些东西,比如:

    myObj.keys.map(...)
    

    here 作者Richard Bovell,但这需要创建一个新对象并复制粘贴到 codePen ,但我不知道如何将其与

    state={...}
    

    myObject={...}
    
    3 回复  |  直到 6 年前
        1
  •  1
  •   Rahul Gandhi    6 年前

    您可以定义 keys Object 原型并能相应地使用。

    Object.prototype.keys = function(){
        return Object.keys(this);
    }
    
    var abc = {a: 1, b: 2, c: 3}
    abc.keys().map(elm => console.log(elm))

    对象 原型影响所有 objects 在密码里。


    更好的解决方案是定义一个keys函数,它为您执行相同的任务,正如在其他答案中提到的那样。

    function keys(object) {
      return Object.keys(object)
    }
    
    keys(myObject).map(...) 
    
        2
  •  1
  •   stinodes    6 年前

    你可以做到 object.keys 执行以下操作:

    const myObject = {
      someProp: 'test',
      someSecondProp: 'test2',
    }
    
    Object.defineProperty(
      myObject, 
      'keys', 
      {
        enumerable: false, 
        get: function() {
          return Object.keys(this) 
        },
      }
    )
    
    myObject.keys  // ['someProp', 'someSecondProp']
    myObject.keys.map(...)
    


    虽然我不会为这种速记而烦恼,因为我满足于使用 Object.keys() .
    keys 几乎只是执行的函数 Object.keys .

    function keys(object) {
      return Object.keys(object)
    }
    
    keys(myObject).map(...)
    

    编辑: 正如我在评论中指出的,你不妨找出 钥匙

    const { keys } = Object
    
        3
  •  0
  •   Francis    6 年前

    问这个问题的人的回答是:

    我一开始真的需要一个东西吗?

    this.state.cities.london 在:

    state={
      cities: {
        london:{name:"London", description: "Bla bla bla"}, 
        ny:{name:"New York", description: "Bla bla bla"}
        }
      others:...
    }
    selectedItem= state.cities
    

    我想我需要那个手柄,这样我就可以用一种比索引号更友好的方式访问每个城市,比如 this.state.cities[0] 对于数组:

    state={
      cities: [
        {name:"London", description: "Bla bla bla"}, 
        {name:"New York", description: "Bla bla bla"}
        ],
       selectedCity:0,
      others:... }
    

    这是多年来动态html和jQuery的产物,你需要一个id或者至少是类名来操作任何东西。 事实上,在95%的情况下,您不需要直接访问,而是将整个事情作为一个列表来处理:

    ListOfItems=()=>{ 
      return(
          this.state.cities.map((value, i) => 
            <p  key={i} onClick={handleCityClick.bind(i, value)}}  >
              Click here for {value.name}
            </p>
          )
        )
      }
    

    在渲染中用作:

      render() {
        const selectedCity=this.state.cities[this.state.selectedCity];
        return (
          <div className="App">
            <this.ListOfItems />
            <h2>Detailed description of {selectedCity.name}:  </h2>
            <p>{selectedCity.description}</p>
          </div>
        );
       }
    

    手环可定义为:

    handleCityClick=(i,val)=>  {this.setState({selectedCity: i}) }