Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在对象的元素上执行贴图功能?_Javascript - Fatal编程技术网

Javascript 如何在对象的元素上执行贴图功能?

Javascript 如何在对象的元素上执行贴图功能?,javascript,Javascript,我有一个简单的函数,希望进一步简化: setAreas(){ this.areas=ipcRenderer.sendSync('request','areas').map(\u area=>{ _area.locations=\u area.locations.map(locationId=>this.getLocation(locationId)) 返回区 }) }一个选项是使用Object.assign,它将返回分配给的基本对象: setAreas() { this.areas = i

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

setAreas(){
this.areas=ipcRenderer.sendSync('request','areas').map(\u area=>{
_area.locations=\u area.locations.map(locationId=>this.getLocation(locationId))
返回区
})

}
一个选项是使用
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))

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

一个选项是使用
对象。分配
,它将返回分配给的基本对象:

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))
(如果不需要
此上下文,您甚至可以删除
.bind(this)

您可以使用

你可以用


我想“可读的一行”是我的意思。我只是觉得有一个内置的JavaScript函数来完成我试图完成的任务,我找不到它。如果你能提供一些输入和预期输出的示例,帮助我们理解你在做什么,我想我的意思是“可读的一行”。我只是觉得有一个内置的JavaScript函数来完成我试图完成的任务,我找不到它。如果你能提供一些输入和预期输出的示例,帮助我们理解你在做什么,它会更好……非常感谢你的回复!我更新了代码以反映您的解决方案。这是一个相当愚蠢的问题,但我很高兴我学到了一些关于何时使用forEach vs map的知识。你所用的逻辑更有意义,答案就这么多!我更新了代码以反映您的解决方案。这是一个相当愚蠢的问题,但我很高兴我学到了一些关于何时使用forEach vs map的知识。你使用的逻辑更有意义