javascript - 如何对对象的元素执行映射功能?

标签 javascript

我有一个简单的函数,我希望进一步简化它:

setAreas() {
  this.areas = ipcRenderer.sendSync('request', 'areas').map(_area => {
    _area.locations = _area.locations.map(locationId => this.getLocation(locationId))
    return _area
  })
}

有没有办法通过在 _area.locations 上执行 map 并返回更新的 _area 来将其减少到一行?

最佳答案

一种选择是使用Object.assign,它将返回分配给的基础对象:

setAreas() {
  this.areas = ipcRenderer.sendSync('request', 'areas').map(_area => (
    Object.assign(_area, { locations: _area.locations.map(locationId => this.getLocation(locationId)) })
  ));
}

但这不太可读。我更喜欢你当前的代码。

请注意,.map 适用于将一个数组转换为另一个数组的情况。在这里,您只需改变现有数组中的每个对象; forEach 更合适:

setAreas() {
  this.areas = ipcRenderer.sendSync('request', 'areas');
  this.areas.forEach((a) => a.locations = a.locations.map(locationId => this.getLocation(locationId)))
}

如果getLocation只接受一个参数,你就可以打高尔夫球

a.locations = a.locations.map(locationId => this.getLocation(locationId))

下降到

a.locations = a.locations.map(this.getLocation.bind(this))

(如果不需要 this 上下文,您甚至可以删除 .bind(this))

关于javascript - 如何对对象的元素执行映射功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54414243/

相关文章:

javascript - everyauth with express (boilerplate) 应用程序

javascript - 使用 lodash 在数组对象中查找并添加额外的键?

JavaScript 点击事件处理

javascript - datatables DOM 元素完全加载时的回调函数

javascript - 在reactjs中保留表列的缓存

javascript - 使用 javascript jquery 或 css 格式化字符串日期

javascript - 滚动到页面底部并无限滚动

javascript - 为什么这些语法相同的函数会产生不同的结果?

javascript - JQGrid 自定义排序

javascript - React 获取抛出问题