【问题标题】:show only object properties from javascript object仅显示来自 javascript 对象的对象属性
【发布时间】:2015-11-24 16:59:39
【问题描述】:

我有一个从 c# 类库返回的 javascript 对象。对象是简单的名称-值对列表。

我正在使用

for (var myList in myListItems) {
  console.log(myList);
  console.log(myListItems[myList]);
}

要检索列表中的所有项目,但在我的项目旁边,我得到了一堆 .toString 方法和其他几个方法,可能是从某些东西继承而来的。

有没有办法删除所有这些方法,只获取我需要的数据?

【问题讨论】:

  • 如果没有看到更多代码/上下文,很难准确地说出,但检查hasOwnProperty 可能会有所帮助。
  • for...in 将遍历对象及其原型的所有可枚举属性。如果您可以清楚地识别您不想要的属性的特征,那么可能有一种方法可以做到这一点。但是您当前的描述不完整/含糊不清。
  • 您有一个解决方案,但目前尚不清楚它为什么有效。在我们知道您的数据结构并知道为什么hasOwnProperty 在这种情况下有效之前,这个问题并不是真正有用的。
  • 我有 c# 方法可以进行一些计算并将一堆名称-值对项返回到 javascript。在 javascript 中,我需要将所有名称 - 值对打印到屏幕上。出于某种原因,除了名称-对值之外,很少出现 .toString 方法。我想这就是 c# 编译器添加到代码中的内容......我的问题是如何删除 .toString 方法,.hasOwnProperty 工作,我不知道如何以及为什么(我是只有基本 JavaScript 知识的 c# 人).. .

标签: javascript c# visual-studio


【解决方案1】:

Alexey 关于使用Object.hasOwnProperty 是正确的

这是一个使用您的代码的示例:

for (var myList in myListItems) {
  // Check if myList is a property on myListItems
  if (myListItems.hasOwnProperty(myList)) {
    console.log(myList);
    console.log(myListItems[myList]);
  }
}

【讨论】:

    【解决方案2】:

    最简单的方法是使用特殊的JS函数Object.prototype.hasOwnProperty()

    var buz = {
      fog: 'stack'
    };
    
    for (var name in buz) {
      if (buz.hasOwnProperty(name)) {
        console.log('this is fog (' + name + ') for sure. Value: ' + buz[name]);
      }
      else {
        console.log(name); // toString or something else
      }
    }
    

    更多信息在这里:JS Mozilla Docs

    【讨论】:

    • 您的示例如果是对 OP 代码的修改,而不是 MDN 文章的复制/粘贴,会更好。
    • 如果toString 定义在对象本身上会怎样?
    • @Felix Kling,当然,你是对的,如果在对象本身上定义了 toString 方法,toString 也会被定义为“内部”属性,但正如作者所说,JS 对象是从C#,我想它只是没有任何功能的纯 JSON 对象。
    • “我想这只是没有任何函数的纯 JSON 对象” 那么为什么toString 会出现在循环中?我认为这个问题需要澄清一下。
    • @AlexeySobolev:但是Object.prototype 上的所有属性都是不可枚举的,因此它们不会被for...in 迭代。
    猜你喜欢
    • 2014-10-24
    • 2022-10-15
    • 2020-10-07
    • 2016-02-26
    • 2016-09-17
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2014-09-06
    相关资源
    最近更新 更多