Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.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-设置对象字段和值的方式比使用forEach循环更干净?_Javascript_Arrays_Ecmascript 6_Foreach - Fatal编程技术网

Javascript-设置对象字段和值的方式比使用forEach循环更干净?

Javascript-设置对象字段和值的方式比使用forEach循环更干净?,javascript,arrays,ecmascript-6,foreach,Javascript,Arrays,Ecmascript 6,Foreach,我现在有这样的东西: queryElastic().then(res => { const map = {}; res.hits.hits.forEach(el => { map [el._source.key] = el._source.value; }); this.setState({ map : map }) } 是否有更清晰/更简洁的方法来设置贴图对象?我考虑使用array.map,但这对我帮助不大,因为它返回一个数组,我需要设置对象

我现在有这样的东西:

queryElastic().then(res => {
  const map = {};
  res.hits.hits.forEach(el => {
    map [el._source.key] = el._source.value;
  });
  this.setState({
    map : map 
  })
}
是否有更清晰/更简洁的方法来设置贴图对象?我考虑使用array.map,但这对我帮助不大,因为它返回一个数组,我需要设置对象中的所有键/值对

另一方面,是否有一种简单的方法可以反转平面对象的所有键/值对?基本上我希望我的值变成键,键变成值

现在我正在用一种愚蠢的方式做这件事:

  const map = {};
  const mapInverse = {};
  res.hits.hits.forEach(el => {
    map[el._source.key] = el._source.value;
    mapInverse[el._source.value] = el._source.key;
  })

提前感谢大家。

您创建地图的方法看起来已经很干净了,不过一般来说,我认为for循环更适合于简单的情况

我可以这样写:

const res=等待查询; 常量映射={}; 对于res.hits的const{u source:{key,value}}{ 映射[键]=值; } 这是我的国家{ 地图 } 您也可以这样做:

queryElastic().then(res => {
  const map = {};
  res.hits.hits.forEach(el => {
    map [el._source.key] = el._source.value;
  });
  this.setState({
    map : map 
  })
}
const map=Object.fromEntries res.hits.map{{u source:{key,value}}=>[key,value] ;
但行数减少并不一定会使它更具可读性。你看一眼就能明白这是怎么回事吗?其他团队成员也这样做吗?如果意图更清晰,多行就更好了。

您创建地图的方法看起来已经很干净了,不过一般来说,我认为for循环更适合于简单的情况

我可以这样写:

const res=等待查询; 常量映射={}; 对于res.hits的const{u source:{key,value}}{ 映射[键]=值; } 这是我的国家{ 地图 } 您也可以这样做:

queryElastic().then(res => {
  const map = {};
  res.hits.hits.forEach(el => {
    map [el._source.key] = el._source.value;
  });
  this.setState({
    map : map 
  })
}
const map=Object.fromEntries res.hits.map{{u source:{key,value}}=>[key,value] ; 但行数减少并不一定会使它更具可读性。你看一眼就能明白这是怎么回事吗?其他团队成员也这样做吗?如果意图更清晰,多行就更好了。

我会使用reduce方法和对象分解,它使事情变得非常整洁易读:

const map = res.hits.hits.reduce((acc, {_source: {key, value}}) => (
  {...acc, [key]: value}
), {});
这也使得按照您要求的相反方式进行修改变得非常简单-只需将[key]:value更改为[value]:key即可。

我将使用reduce方法和对象解构,它使事情变得非常整洁和可读:

const map = res.hits.hits.reduce((acc, {_source: {key, value}}) => (
  {...acc, [key]: value}
), {});

这也使得按照您的要求以相反的方式进行修改变得非常简单-只需将[key]:值更改为[value]:键。

不确定这是否会提高可读性,但您可以将其收紧,并消除用于第一位的预声明变量:

querylastic.thenres=>{ const map=res.hits.hits.reduceacc,{u source:{key,value}}=>{ …acc,[键]:值 }, {}; 这是我的国家{ 地图:地图 } } 您可以使用和反转键和值:

const reversed=Object.fromEntries Object.entriessomeObject .map[键,值]=>[值,键]
不确定这是否提高了可读性,但您可以收紧它并消除第一位使用的预先声明的变量:

querylastic.thenres=>{ const map=res.hits.hits.reduceacc,{u source:{key,value}}=>{ …acc,[键]:值 }, {}; 这是我的国家{ 地图:地图 } } 您可以使用和反转键和值:

const reversed=Object.fromEntries Object.entriessomeObject .map[键,值]=>[值,键]
尤其像你的评论,如果它不清楚或不明显的是什么,或者它是如何工作的,那么更短并不一定更好。这需要经常教。谢谢你的建议。每个map[key]对的look和manually设置的标准似乎是最可读的。较短的实际上可读性较差!尤其像你的评论,如果它不清楚或不明显的是什么,或者它是如何工作的,那么更短并不一定更好。这需要经常教。谢谢你的建议。每个map[key]对的look和manually设置的标准似乎是最可读的。较短的实际上可读性较差!谢谢你的建议。我在考虑arr.reduce,但它似乎没有提高可读性!谢谢你的建议。我在考虑arr.reduce,但它似乎没有提高可读性!