Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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 to map对象数组的Object.entries返回未定义,除非使用console.log_Javascript_Arrays - Fatal编程技术网

Javascript forEach to map对象数组的Object.entries返回未定义,除非使用console.log

Javascript forEach to map对象数组的Object.entries返回未定义,除非使用console.log,javascript,arrays,Javascript,Arrays,我有一个包含键值对的对象数组,我想在每个对象中找到一个特定的键并返回值 阵列的一个示例: filterCounties=[ { "StateName": "Delaware", "CountyName": "Kent", "FIPS": 10001, "Eligibles_2017": 33292, "Eligibles_2018": 34938, "Penetration_2017": 0.107, "Penetration_2018

我有一个包含键值对的对象数组,我想在每个对象中找到一个特定的键并返回值

阵列的一个示例:

filterCounties=[
  {
    "StateName": "Delaware",
    "CountyName": "Kent",
    "FIPS": 10001,
    "Eligibles_2017": 33292,
    "Eligibles_2018": 34938,
    "Penetration_2017": 0.107,
    "Penetration_2018": 0.123
  },
  {
    "StateName": "Delaware",
    "CountyName": "New Castle",
    "FIPS": 10003,
    "Eligibles_2017": 94030,
    "Eligibles_2018": 98080,
    "Penetration_2017": 0.128,
    "Penetration_2018": 0.164
  },
  {
    "StateName": "Delaware",
    "CountyName": "Sussex",
    "FIPS": 10005,
    "Eligibles_2017": 61964,
    "Eligibles_2018": 65990,
    "Penetration_2017": 0.082,
    "Penetration_2018": 0.097
  },
  {
    "StateName": "Delaware",
    "CountyName": "Pending County Designation",
    "FIPS": 10,
    "Eligibles_2017": 9,
    "Eligibles_2018": 0,
    "Penetration_2017": 0,
    "Penetration_2018": 0
  }
]
我要寻找的关键是Permission_2018-我可以使用以下代码并使用console.log输出值

const mapTest = new Map(
      Object.entries(filterCounties).forEach(([key, value]) =>
        console.log((key, value["Penetration_2018"]))
      )
    );
这将输出以下值:

但是,如果我指定一个变量,然后记录该变量

 const mapTest = new Map(
      Object.entries(filterCounties).forEach(
        ([key, value]) => (key, value["Penetration_2018"])
      )
    );
    console.log(`This is mapTest ${mapTest}`);
我得到的[object Map]没有值——我认为当使用箭头函数时,返回是隐式的

输出图像-带或不带字符串连接

我最终想要提取这些值,将它们指定给胜利条形图的Y轴。感谢您提供的见解/指导。

几个问题:

  • forEach
    始终返回
    undefined
    。您需要改用
    map
  • (key,value[“permission_2018”])
    不是元组,而是逗号运算符表达式,结果为
    value[“permission_2018”]
    。改用方括号表示法
  • 当转换为字符串时,
    映射
    没有有用的表示形式。您需要将其转换为数组或其他形式,以获得更有用的字符串表示形式:
代码:

使用数组时,更传统的做法是直接在数组上应用
map
,而您为什么需要一个map也是个谜。如果需要唯一值,请使用以下集合:

const uniques = [...new Set(filterCounties.map(value => value["Penetration_2018"]))];
console.log(`This is uniques: ${uniques}`);

Object.entries
在数组中非常无用。如果需要,可以使用array
entries
方法

我认为当使用arrow函数时,return是隐式的

具有简明主体的arrow函数隐式返回表达式值yes。但是,在第一个示例中,
console.log
不返回任何内容,在这两个示例中,
forEach
不返回任何内容。在第二个示例中,使用逗号运算符表示某种“tuple”表示法,而
Map
构造函数需要数组

与其尝试使用“forEach映射对象数组”,不如使用
map
方法映射对象数组

const mapTest = new Map(filterCounties.map((value, key) => [key, value.Penetration_2018]));
console.log('This is mapTest:', mapTest);

.forEach
不返回值或数组。尝试改用
.map
。此外,在这种情况下,您不需要Javascript
Map
(它不能有重复的键),而且考虑到Victory BarChart似乎将
数组
作为数据(而不是
Map

这是我建议的改变:

const mapTest = filterCounties.map(
  element => ({'Penetration_2018': element['Penetration_2018']})
)

谢谢你这么快的反应——我尝试了同样的结果——只是再次尝试——将编辑这个帖子来显示一个输出的图像。<代码>前段()/代码>从不提供返回,除非你考虑<代码>未定义< /代码>返回。使用
map()
它总是提供一个返回。相反,请查看您是否希望在改变原始对象的元素后返回该对象。非常感谢@trincot的详细解释-非常感谢。很抱歉我的解释不够透彻-该阵列有大约3000个县,单独使用时有许多重复的渗透值-因此在这种情况下设置不可行。谢谢@Bergi-谢谢-我明白我的问题,感谢您花时间解释。
const mapTest = filterCounties.map(
  element => ({'Penetration_2018': element['Penetration_2018']})
)