首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用forEach映射对象数组的Object.entries返回undefined,但使用console.log时除外

使用forEach映射对象数组的Object.entries返回undefined,但使用console.log时除外
EN

Stack Overflow用户
提问于 2018-02-12 21:18:08
回答 3查看 17.8K关注 0票数 3

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

数组的一个示例:

代码语言:javascript
复制
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
  }
]

我正在寻找的关键字是Penetration_2018 -我可以使用以下代码并使用console.log输出值

代码语言:javascript
复制
const mapTest = new Map(
      Object.entries(filterCounties).forEach(([key, value]) =>
        console.log((key, value["Penetration_2018"]))
      )
    );

这将输出值:console.log output

但是,如果我赋值给一个变量,然后记录该变量

代码语言:javascript
复制
 const mapTest = new Map(
      Object.entries(filterCounties).forEach(
        ([key, value]) => (key, value["Penetration_2018"])
      )
    );
    console.log(`This is mapTest ${mapTest}`);

我得到的object Map没有值--我以为使用箭头函数时,return是隐式的?

输出图像-使用或不使用字符串连接enter image description here

我最终希望提取这些值,以便将它们分配给胜利BarChart的Y轴。感谢您的见解/指导。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-12 21:35:32

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

这是我建议的改变:

代码语言:javascript
复制
const mapTest = filterCounties.map(
  element => ({'Penetration_2018': element['Penetration_2018']})
)
票数 1
EN

Stack Overflow用户

发布于 2018-02-12 21:24:56

几个问题:

  • forEach始终返回undefined。你需要使用的instead.
  • (key, value["Penetration_2018"])不是一个元组,而是一个逗号运算符表达式,结果是value["Penetration_2018"]的值。使用方括号表示法。
  • A Map在转换为字符串时没有有用的表示形式。您需要将其转换为数组或其他形式,以获得更有用的字符串representation:

代码:

代码语言:javascript
复制
const mapTest = new Map(
    Object.entries(filterCounties).map(
        ([key, value]) => [key, value["Penetration_2018"]]
    )
);
console.log(`This is mapTest ${JSON.stringify([...mapTest])}`);

对于数组来说,直接在数组上应用map是更传统的做法,为什么你需要一个映射也是一个谜。如果您想要唯一的值,则使用一个集合:

代码语言:javascript
复制
const uniques = [...new Set(filterCounties.map(value => value["Penetration_2018"]))];
console.log(`This is uniques: ${uniques}`);
票数 8
EN

Stack Overflow用户

发布于 2018-02-12 21:27:03

Object.entries在数组上是非常无用的。如有必要,可以使用数组entries方法。

我想当使用箭头函数时,返回是隐式的吗?

具有简明正文的箭头函数隐式返回表达式值,是。但是,在第一个示例中,console.log不返回任何内容,并且在两个示例中,forEach都不返回任何内容。在第二个示例中,您使用逗号运算符表示某种“元组”符号,而Map构造函数需要数组。

您应该使用map方法来映射对象数组,而不是尝试使用"forEach来映射对象数组“!

代码语言:javascript
复制
const mapTest = new Map(filterCounties.map((value, key) => [key, value.Penetration_2018]));
console.log('This is mapTest:', mapTest);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48747444

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档