是否有任何类型的内置方法可以在没有循环的情况下迭代对象参数。就像数组对象有方法一样(forEach,sort,filter ..)。 例如,有一个数组
var numbers = [3,342,23,22,124];
var max = 0;
for(var i=0;i<numbers.length;i++){
if(numbers[i] > max){
max = numbers[i];
}
}
alert(max);
可以使用
而不是循环sort()
方法
var numbers = [3,342,23,22,124];
numbers.sort(function(a,b){return b - a});
alert(numbers[0]);
JavaScript中是否有常规对象{}
的方法,其工作方式与sort()
相同?
更普遍的是有任何方法可以避免这种循环:
for(var parameter in object){
var data = object[parameter]
exampleMethod(data);
}
有没有办法在没有循环的情况下多次执行一个函数?
答案 0 :(得分:4)
不,但您经常可以使用像Object.keys()
这样的函数打开通往像.forEach()
这样的数组原型方法的途径。
Object.keys()
方法返回一个包含对象“own”属性名的数组。 (“自己的”名称是直接在对象上的属性的名称,而不是从原型链继承。)从那里,您可以使用像.forEach
这样的数组方法来遍历属性名称,并使用通过属性值引用对象的那些。
例如,考虑这个对象:
var dimensions = {
length: 20,
height: 30,
width: 40
};
如果你想总结边缘,你可以这样做:
var perimeter = Object.keys(dimensions).reduce(function(sum, dkey) {
sum += 4 * dimensions[dkey];
return sum;
}, 0);
还请注意相关方法Object.getOwnPropertyNames()
和Object.getOwnPropertySymbols()
,它们扩展了可用于迭代的属性。
答案 1 :(得分:1)
不喜欢sort,因为JavaScript对象中没有属性顺序。但是,您可以使用Object.keys和map将对象转换为值数组。
var o = {a:1,b:3, c, :2};
var arr = Object.keys(o).map(key=>o[key]).sort((a,b)=>b-a);
var max = arr[0];
对于常规迭代,组合键和forEach
Object.keys(o).forEach(key=>console.log('key',key, 'value', o[key]));