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.
}
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);