Javascript对象:迭代属性[重复]

2024-04-17

我有一个变量,当打印到控制台时,它看起来像这样:

Object { PK-34={...}, PK-35={...}}

我向该变量添加一个 size 方法:

Model_value.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
    if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

此方法返回 0,并使用以下方法迭代这些属性:

for (foo in Model_value)
{
  //...
}

不起作用。

我将如何迭代这些 PK-34、PK-35 属性?


If size最终为零,显然有问题的对象是继承这些属性来自其原型。在这种情况下,这意味着您不希望hasOwnProperty check.

Example:

var Model_value = {};
Model_value.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
    if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};
Model_value.sizeInherited = function(obj) {
    var size = 0, key;
    for (key in obj) {
      size++;
    }
    return size;
};

function Foo() {
}
Foo.prototype["PK-34"] = {
  name: "I'm PK-34"
};
Foo.prototype["PK-35"] = {
  name: "I'm PK-35"
};

display("Model_value.size(new Foo()) = " + Model_value.size(new Foo()));
display("Model_value.sizeInherited(new Foo()) = " + Model_value.sizeInherited(new Foo()));

var f = {
  "PK-34": {name: "I'm PK-34"},
  "PK-35": {name: "I'm PK-35"}
};

display("Model_value.size(f) = " + Model_value.size(f));
display("Model_value.sizeInherited(f) = " + Model_value.sizeInherited(f));

var bar = new Foo();
bar["PK-36"] = {name: "I'm PK-36"};

display("Model_value.size(bar) = " + Model_value.size(bar));
display("Model_value.sizeInherited(bar) = " + Model_value.sizeInherited(bar));

实时复制 http://jsbin.com/ulipi5/2

在第一种情况下(new Foo()),创建的新对象Foo没有自己的属性(只有继承的属性),所以size最终成为0然而sizeInherited is 2(因为它从其原型继承了两个属性)。

在第二种情况下,因为f有它的own PK-34 and PK-35属性,其size is 2。它没有从其原型继承任何属性,因此sizeInherited也是2.

在第三种情况下,bar既有两个继承的属性,又有一个自己的属性,所以size is 3 and sizeInherited is 2.


Update:编辑似乎稍微改变了问题。如果您尝试迭代属性in Model_value,那么你不想接受参数,你想使用this:

来找出有多少个own它具有的属性:

Model_value.size = function() {
    var size = 0, key;
    for (key in this) {
        if (this.hasOwnProperty(key)) size++;
    }
    return size;
};

查找有多少个属性total它具有(包括继承的):

Model_value.size = function() {
    var size = 0, key;
    for (key in this) {
        size++;
    }
    return size;
};

Example:

function Model() {
}
Model.prototype["PK-34"] = {
  name: "I'm PK-34"
};
Model.prototype["PK-35"] = {
  name: "I'm PK-35"
};

var Model_value = new Model();

Model_value.size = function() {
  var size = 0, key;
  for (key in this) {
      if (this.hasOwnProperty(key)) size++;
  }
  return size;
};

Model_value.sizeInherited = function() {
  var size = 0, key;
  for (key in this) {
      size++;
  }
  return size;
};

display("Model_value.size() = " + Model_value.size());
// ^-- returns 2 ("size" and "sizeInherited")

display("Model_value.sizeInherited() = " + Model_value.sizeInherited());
// ^-- returns 4 ("PK-34", "PK-35", "size", and "sizeInherited")

实时复制 http://jsbin.com/ulipi5/3

请注意,我们添加的函数Model_value已分配给属性,因此它们会显示在总计中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript对象:迭代属性[重复] 的相关文章

  • Puppet - 在迭代哈希时,如果 hiera 中不存在,则在清单中设置默认值

    我正在迭代 hiera 哈希中的许多条目 并希望通过在清单中设置默认值 例如ensure groups managehome等 并且如果 hiera 中存在重复的键 值对 则覆盖默认值 到目前为止 我尝试过的所有方法都无法获得默认值 我知道
  • 将 css 宽度字符串转换为常规数字

    在尝试计算隐藏元素的宽度时 我发现 jquery width 对于该元素的宽度返回 0 我发现使用 jquery css width 将通过使用声明的样式宽度返回正确的宽度 即使该值与初始样式表不同 问题是 css width 方法返回一个
  • 检查 Javascript 中的 URL 是否损坏

    这个问题之前已经发布在 Stack 上 但没有一个具体到我想要理解的内容 检查 URL 是否正确的最简单方法是发送 http Head 请求 但是如何使用它来指定 URL 呢 我在之前的帖子中发现了这一点 function UrlExist
  • 防止 CKEditor 添加“data-cke-saved”并转换 <

    我有 CKEditor 的 jQuery 实现 我们经常使用对话框将 HTML 标记添加到 A 标记的 标题 属性 然而 当我们这样做时 它会转换 HTML 代码 以便将其解析为文本 我们需要代码保持其输入时的确切形式 而不是在任何地方放置
  • 如何在 AngularJS 中读取 Java 属性文件?

    有什么方法可以从位于网络服务器外部的 angularjs 读取属性文件吗 就像在java中一样 属性文件部署在项目之外 但是我们可以将项目中的这些文件作为filter properties读取 这样任何解决方案都可以在AngularJS中找
  • 如何使用 selenium 获取带有 css 选择器的所有元素的直接子元素?

    我已经尝试过使用 gt 语法 但 selenium 不接受它 我知道有一种方法可以使用 Xpath 获取它 但我们的整个项目是使用 CSS 选择器编写的 我试图存储一个列表 其中包含元素的所有直接子元素 但不包含其子元素 后代 当我使用 语
  • Knockout ObservableArray 不更新 HTML Foreach

    所以我有一个可以正常工作的 observablearray 但 UI 没有更新 我读过很多人遇到这种类型的问题 但我没有看到 所以 HTML 是 tbody tr td span class label label success Yup
  • 对登录 Instagram 的 PhantomJS 代码进行故障排除

    我编写了这个 PhantomJS 脚本来自动登录 Instagram 它可以成功填写表单字段并按提交按钮 但它总是被重定向回登录屏幕并显示以下消息 你的用户名或密码不正确 我 100 确信凭据是正确的 并且我用多个 Instagram 帐户
  • d3.js 和 Chart.js 之间的比较(仅适用于图表)[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在项目中多次使用过 Chart js 但从未使用过 d3 js 很多人说 d3 js 是最好的图表 javascript 框架 但没
  • Edge 中的 Javascript 仅适用于打开的 devtools

    我遇到的问题是 在 MS Edge 中 我的图像映射功能只能部分工作 它由淘汰赛 FW 提供动力 在更大的图像映射上 它不会将整个图像映射注册到视图模型中 因此 图像映射的所有悬停效果和单击样式都会停止工作 然而 这只是大图像地图的问题 还
  • 检查窗口是否已经打开 window.open

    我有一个 html 页面 在我调用的页面正文中onload调用 javascript 函数打开弹出窗口的事件 这是代码 var newWindow null function launchApplication if newWindow n
  • Rails,单击 link_to helper 后未加载 JavaScript

    当我在 Rails 中使用 link to 帮助程序时 我在加载 javascript 时遇到了一些问题 当我手动输入 localhost 3000 products new 的 url 或重新加载页面时 JavaScript 会加载 但是
  • Chrome 浏览器自动向下滚动内容(当没有人要求时)

    我们有丰富的页面 其中有一个包含动态内容的小块 直到最近一切都运转良好 现在 Chrome 浏览器以某种方式 捕获 页面上的一个 div 并向下滚动整个内容 用语言很难解释 但演示起来却容易得多 这是测试页 只需在 Chrome 中打开它
  • Internet Explorer 无法打开 Internet 站点操作中止,如何修复此错误?

    此代码在 IE 中给出错误 Internet Explorer 无法打开 Internet 站点操作中止 如何修复此错误 var tip p Most computers will open PDF documents tip automa
  • 使用 page_action 时不出现弹出窗口

    我是 Google Chrome 扩展开发的新手 我有以下两个疑问 我使用时没有出现弹出窗口page action在manifest json中 但在我使用时出现browser action 我想知道为什么 还是我做错了 该图标也显示为非活
  • 将自行车分配给人员 - 第一优先级(距离最近的人最近的自行车)

    将网格传递给某个位置有自行车和人员的函数 c A a b D d B C Output 像这样的东西 A 1 B 3 C 8 D 1 其中 A 是人 1 是到达自行车所需的步数 标准 距离自行车最近的人 优先获得自行车 单辆自行车不能分配给
  • 如何通过向上移动到地址栏来检测鼠标离开页面?

    我创建了一个 jQuery 事件 当访问者离开页面时会弹出一个对话框 我正在使用 e pageY 来检测鼠标位置 当鼠标位于Y 小于2时 弹出对话框 问题是 当我向下滚动页面并决定离开页面时 弹出窗口不会显示 因为鼠标不在 Y 小于 2 处
  • jquery 改变标签

    我的代码不起作用 你能帮我吗 我希望将 class s7 的标签名称 p 更改为 h1 问题是您将所有元素与类相匹配s7 但是您需要对它们进行一一处理 以便将其内容复制到新元素中 在您当前的代码中 this总是document 不是当前元素
  • 使用 javascript 复制到所有浏览器的剪贴板

    我试图让 复制到剪贴板 适用于所有浏览器 但运气不好 我正在使用 javascript 但我不想使用零剪贴板 http zeroclipboard org to do 请让我们知道我的代码有什么问题 感谢您的帮助 下面是代码 目前我的代码仅
  • 使用 location.href 或 window.location.reload(true) 重新加载页面

    我需要在 ajax 调用成功后重新加载页面 我看到一些代码 不是我的 有两种方法 success function obj code location href location href or success function obj c

随机推荐