【问题标题】:JavaScript map(), undefined property of object from the collectionJavaScript map(),集合中对象的未定义属性
【发布时间】:2015-06-04 18:36:04
【问题描述】:

我有一组过滤器对象 this.selectedFilters

我使用JS map方法只选择过滤器对象的field属性。

 console.log(this.selectedFilters.map((val) => {
            console.log(val);
            console.log(val.field);
            console.log(val['field']);
            return val.field;
        }));

结果是:

谁能告诉我为什么val.field 给出一个未定义的值? :(

PS:我用的是 TypeScript

更新:

我想我知道为什么val 是一个字符串。可能是因为this.selectedFiltersselect HTML 元素(启用多个)的 ng 模型,其选项具有对象值。也许选项值在传输到this.selectedFilters模型时从一个对象转换为一个json字符串

【问题讨论】:

  • this.selectedFilters的内容是什么
  • 其实挺长的。但它包含在第一个日志中看到的两个对象
  • 你用的是什么浏览器?这样我们就知道如何解释 console.log 屏幕截图了。 看起来像 Chrome,但是...
  • JSON.parse(val) 提供了什么?
  • 是的,我正在使用 chrome

标签: javascript typescript


【解决方案1】:

最可能的答案是val 是一个字符串,其中包含您在控制台中看到的 JSON。如果它是一个对象,控制台输出看起来会有所不同。

您似乎需要在其中输入JSON.parse。你没有展示原始的 TypeScript,但在 JavaScript 中它看起来像这样:

console.log(this.selectedFilters.map((val) => {
    val = JSON.parse(val);    // <====
    console.log(val);
    console.log(val.field);
    console.log(val['field']);
    return val.field;
}));

【讨论】:

  • 试图通过打字稿投射它:console.log((val).field);仍然未定义。还是我的选角正确?
  • @RojBeraña:casting 会做 JSON 解析吗?我倾向于不这么认为,但我不“做”TypeScript。对于铸造操作来说,这将是一件奇怪的事情。
  • 谢谢!有效! var r = JSON.parse(val); (f).field;我将不得不等待几分钟才能选择你的答案:)
  • 当我的打字稿代码实际上是:this.selectedFilters.map((val: holmes.reports.IReportFilter) => { console.log(val.field); return val.field; })
  • @RojBeraña:我认为这是因为val 是一个字符串,而不是一个对象。强制转换操作猜测字符串应该通过JSON.parse 运行是一种奇怪的行为(而不是被解释为 XML 或其他几种数据格式中的任何一种)。但同样,您必须与更熟悉 TypeScript 及其约定的人交谈。 :-) 很高兴有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-27
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2016-02-26
相关资源
最近更新 更多