文档章节

如何有效地计算JavaScript中对象的键/属性数量?

 技术盛宴
发布于 2019/12/08 11:15
字数 603
阅读 9
收藏 0

计算对象的键/属性数的最快方法是什么? 是否可以在不迭代对象的情况下执行此操作? 即不做

var count = 0;
for (k in myobj) if (myobj.hasOwnProperty(k)) count++;

(Firefox确实提供了一个神奇的__count__属性,但此属性已在版本4的某个位置删除。)


#1楼

对于在项目中具有Ext JS 4的用户,您可以执行以下操作:

Ext.Object.getSize(myobj);

这样做的好处是它可以在所有与Ext兼容的浏览器(包括IE6-IE8)上运行,但是,我相信运行时间并不比O(n)更好,就像其他建议的解决方案一样。


#2楼

如果上面的jQuery不起作用,请尝试

$(Object.Item).length

#3楼

我认为这是不可能的(至少在不使用某些内部组件的情况下)。 而且我认为通过优化它不会带来太大收益。


#4楼

如果您实际上遇到性能问题,建议您使用一个函数来包装向对象添加属性或从对象中删除属性的调用,该函数还要增加/减少适当命名的(size?)属性。

您只需计算一次属性的初始数量,然后从那里继续。 如果没有实际的性能问题,请不要打扰。 只需将这段代码包装在一个函数getNumberOfProperties(object)并完成它即可。


#5楼

我不知道有什么方法可以执行此操作,但是为了将迭代次数降到最低,您可以尝试检查__count__的存在,如果不存在(即,不是Firefox),则可以遍历该对象并定义它供以后使用,例如:

if (myobj.__count__ === undefined) {
  myobj.__count__ = ...
}

这样,任何支持__count__浏览器__count__将使用该方法,并且仅对那些不支持__count__方法进行迭代。 如果计数发生变化而您不能执行此操作,则可以始终使它成为函数:

if (myobj.__count__ === undefined) {
  myobj.__count__ = function() { return ... }
  myobj.__count__.toString = function() { return this(); }
}

通过这种方式,您可以随时引用myobj。 __count__函数将触发并重新计算。

本文转载自:https://stackoom.com/question/Wns/如何有效地计算JavaScript中对象的键-属性数量

粉丝 0
博文 781
码字总数 0
作品 0
深圳
高级程序员
私信 提问
用 map 代替纯 JavaScript 对象

作者:Dmitri Pavlutin 翻译:疯狂的技术宅 原文:dmitripavlutin.com/maps-vs-pla… 未经允许严禁转载 JavaScript 普通对象 可用于保存结构化数据。 但是我发现很烦人的一件事:对象的键必须...

前端先锋
2019/10/28
0
0
【JSConf EU 2018】JavaScript引擎: 精粹部分

JSConf EU 2018圆满结束, 谷歌V8的开发者Mathias Bynens以及Benedikt Meurer一起发表了《JavaScript Engines: The Good Parts™》演讲,本文将带领大家回顾一下演讲上所提到的重点。 演讲第一...

想成为工匠的码农
2018/06/19
0
0
【译】如何在 JavaScript 中使用对象的方法

原文:How To Use Object Methods in JavaScript 作者:Tania Rascia 译者:博轩 介绍 JavaScript 中,对象是 键/值 对的集合。值可以包含属性和方法,并且可以包含所有其他 JavaScript 数据...

jokingzhang
2019/04/22
0
0
坚实的 React 基础:初学者指南

在过去的几个月里,我一直在使用 React 和 React-Native。我已经发布了两个作为产品的应用, Kiven Aa(React)和 Pollen Chat(React Native)。当我开始学习 React 时,我找了一些不仅仅是...

作者: Rajat Saxena
2018/10/28
0
0
JavaScript闪电入门教程

如需在 HTML 页面中插入JavaScript,请使用

材大难为用
2019/01/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
82
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
73
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
124
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部