Javascript JS中的列表迭代

Javascript JS中的列表迭代,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个包含如下数据的列表: { State: 'Florida', Temperature: 83, } { State: 'Florida', Temperature: 82, } { State: 'Florida', Temperature: 79, } { State: 'Nevada', Temperature: 96, } { State: 'Nevada', Temperature: 93, } 等等 该列表按州按字母顺

我有一个包含如下数据的列表:

{ 
  State: 'Florida',
  Temperature: 83,
}
    { 
  State: 'Florida',
  Temperature: 82,
}
{ 
  State: 'Florida',
  Temperature: 79,
}
{ 
  State: 'Nevada',
  Temperature: 96,
}
{ 
  State: 'Nevada',
  Temperature: 93,
}
等等

该列表按州按字母顺序排序,并按各州的最高温度到最低温度排序。 如何遍历此列表以查找每个状态的最高温度

试试这个,但仍然不起作用:

var MongoClient = require('mongodb').MongoClient;

MongoClient.connect('mongodb://localhost:27017/weather', function(err, db) {
    if(err) throw err;

    var data = db.collection('data');

    var cursor = data.find({});

    cursor.each(function(err, doc) {
        if(err) throw err;
        if(doc == null) {
            return db.close();
        }
        var maxTemp = data.reduce(function(a,b) {
            return Math.max(a.Temperature, b.Temperature);
        });
        console.dir(maxTemp);
    });
});
创建一个对象

var obj = {};
对于数组中的每个对象,如果该对象没有对应于状态名称的键,请添加一个键并将内容设置为空数组。然后把温度调高

arr.forEach(function (el) {
  if (!obj[el.State]) obj[el.State] = [];
  obj[el.State].push(el.Temperature);
});
最后,在对象上循环并使用
Math.max.apply
查找数组中的最大值:

for (var k in obj) {
  console.log(k + ': ' + Math.max.apply(null, obj[k])); // Florida: 83, Nevada: 96.
}

  • 粘贴的数据不是有效的JSON

  • 下面的代码在
    node.js中工作:



  • 如果您想支持一些旧浏览器,我建议您使用循环作为示例,假设您有一个包含对象的有效数组。 填充
    maxTemps
    后,它看起来像这样:

    { Florida=83, Nevada=96}
    
    代码如下:

    var maxTemps = {};
        data = [{ 
            State: 'Florida',
            Temperature: 83,
        },
        { 
            State: 'Florida',
            Temperature: 82,
        },
        { 
            State: 'Florida',
            Temperature: 79,
        },
        { 
            State: 'Nevada',
            Temperature: 96,
        },
        { 
            State: 'Nevada',
            Temperature: 93,
        }];
    
    for(var i=0; i<data.length; i++) {
        dataset = data[i];
        if(maxTemps[dataset.State]) {
            maxTemps[dataset.State] = Math.max(dataset.Temperature, maxTemps[dataset.State])
        } else {
            maxTemps[dataset.State] = dataset.Temperature;
        }
    }
    

    此列表是JSON类型的数据吗?是的,我当前使用的是mongoDB。这不是真正有效的JSON,也不是数组,可能会仔细检查输出并逐字粘贴。我认为reduce更好:)@bitsMix添加了一个使用
    数组的版本。reduce
    函数:它可以工作,但当我尝试将变量分配给我的db集合时,它的抛出错误是“Object has no method‘reduce’”(我在上面添加了代码),我认为OP是在寻找每个状态的最高温度。
    var maxTemps = {};
        data = [{ 
            State: 'Florida',
            Temperature: 83,
        },
        { 
            State: 'Florida',
            Temperature: 82,
        },
        { 
            State: 'Florida',
            Temperature: 79,
        },
        { 
            State: 'Nevada',
            Temperature: 96,
        },
        { 
            State: 'Nevada',
            Temperature: 93,
        }];
    
    for(var i=0; i<data.length; i++) {
        dataset = data[i];
        if(maxTemps[dataset.State]) {
            maxTemps[dataset.State] = Math.max(dataset.Temperature, maxTemps[dataset.State])
        } else {
            maxTemps[dataset.State] = dataset.Temperature;
        }
    }
    
    data.sort(function(a,b) {
        return a.Temperature < b.Temperature;
    });
    console.log(data[0].Temperature);
    
    var maxTemp = data.reduce(function(a,b) {
        return Math.max(a.Temperature, b.Temperature);
    });
    console.log(maxTemp);