我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
我有一个JavaScript对象。是否有一种内置或公认的最佳实践方法来获取此对象的长度?
const myObject = new Object();
myObject["firstname"] = "Gareth";
myObject["lastname"] = "Simpson";
myObject["age"] = 21;
当前回答
使用Object.keys(myObject).length获取对象/数组的长度
var myObject=新对象();myObject[“firstname”]=“Gareth”;myObject[“lastname”]=“Simpson”;myObject[“age”]=21;console.log(Object.keys(myObject).length)//3.
其他回答
如果您使用的是AngularJS 1.x,则可以通过创建过滤器并使用以下任何其他示例中的代码以AngularJS的方式进行操作:
// Count the elements in an object
app.filter('lengthOfObject', function() {
return function( obj ) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
}
})
用法
在控制器中:
$scope.filterResult = $filter('lengthOfObject')($scope.object)
或者在您看来:
<any ng-expression="object | lengthOfObject"></any>
我同样需要计算通过websocket接收的对象所使用的带宽。对我来说,只要找到Stringified对象的长度就足够了。
websocket.on('message', data => {
dataPerSecond += JSON.stringify(data).length;
}
在对象继承的情况下,Object.keys不会返回正确的结果。要正确计算对象财产,包括继承的属性,请使用for-in。例如,通过以下函数(相关问题):
var objLength = (o,i=0) => { for(p in o) i++; return i }
var myObject=新对象();myObject[“firstname”]=“Gareth”;myObject[“lastname”]=“Simpson”;myObject[“age”]=21;var child=对象.create(myObject);child[“sex”]=“男性”;var objLength=(o,i=0)=>{for(p in o)i++;return i}console.log(“Object.keys(myObject):”,Object.keyes(myObject).length,“(OK)”);console.log(“Object.keys(child):”,Object.keyes(child).length,“(错误)”);console.log(“objLength(child):”,objLength“child),”(OK)“);
使用Object.entries方法获取长度是实现此目的的一种方法
const objectLength=obj=>Object.entries(obj).length;常量人={id:1,name:“John”,年龄:30岁}常量汽车={类型:2,颜色:“红色”,}console.log(对象长度(人));//3.console.log(objectLength(car));//2.
更新:如果您使用Undercore.js(推荐使用,它是轻量级的!),那么您可以
_.size({one : 1, two : 2, three : 3});
=> 3
如果不是这样,而且无论出于何种原因,您都不想乱用Object财产,并且已经在使用jQuery,那么同样可以访问插件:
$.assocArraySize = function(obj) {
// http://stackoverflow.com/a/6700/11236
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};