【问题标题】:Looping through an array of objects in JavaScript循环遍历 JavaScript 中的对象数组
【发布时间】:2014-10-23 05:58:34
【问题描述】:

您好,我在循环对象数组以查找最高属性值并返回包含该最高属性值的对象时遇到问题。假设我有这个对象数组:

var eachMapping = [ { I: 1 },
                        { w: 1, a: 1, n: 1, t: 1 },
                        { t: 1, h: 1, i: 1, s: 1 },
                        { w: 1, o: 1, r: 1, d: 6 } ];


    var largest = 0;
        for(var i = 0; i < eachMapping.length; i++){
            for(prop in eachMapping){
                if(eachMapping[i][prop] > largest){
                    largest = eachMapping[i][prop]
                    wantedobject = eachMapping[i];
                }
            }
    }

    console.log(wantedobject)

这将返回未定义。我希望这个循环返回{ w: 1, o: 1, r: 1, d: 6 } 通过将其分配给wantedobject,因为数组中的所有对象,它的属性值是其他对象中所有属性值中最高的。谢谢!

【问题讨论】:

  • for(prop in eachMapping) 应该是for(var prop in eachMapping[i])
  • 或者更确切地说:for(prop in eachMapping[i]) 对吧?
  • 你也可以不使用循环,使用reduceObject.keys
  • 它可以在有和没有 var 的情况下使用。 var 有什么区别?
  • var 是声明变量所必需的。如果您不使用var,您将创建一个隐式全局。不要忘记var

标签: javascript for-loop


【解决方案1】:

一些基本的编码错误 - 这可能解释了反对意见:

  • 未初始化wantedobject
  • 未声明循环变量prop
  • 分号使用不一致
  • 最大的错误是没有使用for(var prop in eachMapping[i])

这行得通:

var eachMapping = [ { I: 1 },
                    { w: 1, a: 1, n: 1, t: 1 },
                    { t: 1, h: 1, i: 1, s: 1 },
                    { w: 1, o: 1, r: 1, d: 6 } ];

var wantedobject = null;
var largest = 0;
    for(var i = 0; i < eachMapping.length; i++){
        for(var prop in eachMapping[i]){
            if(eachMapping[i][prop] > largest){
                largest = eachMapping[i][prop];
                wantedobject = eachMapping[i];
            }
        }
}

console.log(wantedobject);

【讨论】:

    【解决方案2】:
    var eachMapping = [ { I: 1 },
                        { w: 1, a: 1, n: 1, t: 1 },
                        { t: 1, h: 1, i: 1, s: 1 },
                        { w: 1, o: 1, r: 1, d: 6 } ];
    
    
    var largest = 0, i = 0, prop, wantedobject;
    for(; i < eachMapping.length; i++){
        for(prop in eachMapping[i]) {//you've missed [i], like Emil G wrote in his comment
            if(eachMapping[i][prop] > largest){
                largest = eachMapping[i][prop]
                wantedobject = eachMapping[i];
            }
        }
    }
    
    console.log(wantedobject)
    

    【讨论】:

      猜你喜欢
      • 2015-10-15
      • 2018-07-10
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多