可以在JavaScript中循环函数吗?

时间:2016-01-19 00:14:55

标签: javascript object built-in

是否有任何类型的内置方法可以在没有循环的情况下迭代对象参数。就像数组对象有方法一样(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);
}

有没有办法在没有循环的情况下多次执行一个函数?

2 个答案:

答案 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]));