Javascript 在react组件触发错误中使用Lodash映射键

Javascript 在react组件触发错误中使用Lodash映射键,javascript,reactjs,lodash,Javascript,Reactjs,Lodash,我不明白为什么我可以在组件中使用Object.keys和.map(),但不能使用lodash中的mapKeys <ul> {/* Working */} {Object.keys(this.props.departments).map(key => this._renderDepartments(key, this.props.departments[key]))} {/* Not working */} {mapKeys(this.props

我不明白为什么我可以在组件中使用
Object.keys
.map()
,但不能使用lodash中的
mapKeys

<ul>
    {/* Working */}
    {Object.keys(this.props.departments).map(key => this._renderDepartments(key, this.props.departments[key]))}

    {/* Not working */}
    {mapKeys(this.props.departments, (hash, department ) => {return this._renderDepartments(hash, department);})}
</ul>
根据。.mapkeys函数应如下所示:

_.mapKeys(hash, => (value, key) {
  return key + value;
});
其中
Object.keys
返回迭代的键数组

在您的特定情况下,代码应类似于:

<ul>
{values(mapKeys(this.props.departments, (department, hash) => 
  {
    return this._renderDepartments(hash, department);
  }))
}
</ul>
    {值(映射键(this.props.departments,(department,hash)=> { 返回此.\u renderDepartments(哈希,department); })) }

\ mapKeys将对象和函数作为参数。回调函数传入的值为param 1,键为param 2。例如:

const mapped = _.mapKeys({ 'a': 1, 'b': 2 }, (value, key) => {
  return key + value;
});

console.log(mapped); // { 'a1': 1, 'b2': 2 }
记住从回调返回值。这将改变返回对象中的键


我想您只是误解了mapKeys的作用——它操作键值并返回对象,其中包含回调中返回的字符串,这似乎与您所追求的不一样。坚持使用
Object.keys().map()

多亏了@psilocybin,我现在明白这不是我在react中需要的正确解决方案。创建Lodash函数是为了操作对象,并始终返回新对象

我通过创建一个助手函数解决了我的问题,我可以在我的代码中使用它

映射对象函数

export default (object, callback) => {
    return Object.keys(object || {}).map(key => {return callback(key, object[key]);});
};
用法

<ul className="DEPARTMENTPICKER_departments">
    {mapObject(this.props.departments, (hash, department) => this._renderDepartments(hash, department))}
</ul>
    {mapObject(this.props.departments,(哈希,department)=>this.\u renderDepartments(哈希,department))}

mapkeys函数看起来应该是这样的,对吗?映射键(对象,(键,值)这正是我所拥有的。为什么mapKeys的行为与在数组上迭代的行为不同呢?试试value,key not key,value即使更改了同样的错误消息,它是否会因为某种原因返回一个对象?啊,看起来我们的第二个func函数没有显式返回任何东西是的,只要重新读取文档,它就会返回一个使用
{key:mappedVal}
创建对象。您可能需要预先添加
{.values()
以从对象获取值数组。即使使用
{mappeys(this.props.departments,(department,hash)=>{返回此值。_renderDepartments(hash,department);}
我收到一条错误消息,返回值将返回一个具有不同键的对象(使用mapKeys回调中返回的任何键)正如在我的示例中所看到的。考虑一下这一点,可能会注销mapKeys给您的值-检查这是您的_renderDepartments函数所期望的格式-mapKeys可能不是您想要的,因为它改变了对象的键。记录了
this收到的值。_renderDepartments
但是看起来很好。是不是这样在对象上运行,并在运行完成后,无论发生什么情况都会自动返回对象?是的,\ mapKeys将始终返回具有新映射键的对象-这可能是问题所在。为什么不使用map?使用
object.keys(obj)
是一种在对象上映射的流行模式,因为它为您提供了键,从而允许访问对象中的值(
obj[key]
),我认为这是最简单的方法!)
<ul className="DEPARTMENTPICKER_departments">
    {mapObject(this.props.departments, (hash, department) => this._renderDepartments(hash, department))}
</ul>