繁体   English   中英

从Javascript中的每一列获取最大值?

[英]Get max value from each column in Javascript?

我在 Javascript 中工作。 我有一个对象数组。 每个对象看起来像这样

{
    date: Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time), 
    Catan: 62588, 
    Dominion: 51915, 
    Codenames: 21263, 
    Terraforming Mars: 2148
}

如何从第 2-5 列获取最大数字的数组?

首先,您映射以从每个对象的 col2-5 中获取值数组,然后将其减少以找到相应列的最大值

 const data = [ { date: "Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time)", Catan: 62588, Dominion: 51915, Codenames: 21263, "Terraforming Mars": 2148, }, { date: "Mon Oct 31 2016 20:00:00 GMT-0500 (Central Daylight Time)", Catan: 9561, Dominion: 74152, Codenames: 5123, "Terraforming Mars": 1078, }, { date: "Mon Oct 31 2016 21:00:00 GMT-0500 (Central Daylight Time)", Catan: 62588, Dominion: 84102, Codenames: 96396, "Terraforming Mars": 6423, }, ] const res = data .map((obj) => Object.values(obj).slice(1, 5)) .reduce((acc, el) => acc.map((max, i) => Math.max(max, el[i])), [0, 0, 0, 0]) console.log(res)

要从对象中获取最大值,请尝试以下操作:

let foo = {
    date: "Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time)", 
    Catan: 62588, 
    Dominion: 51915, 
    Codenames: 21263, 
    "Terraforming Mars": 2148
};
let arr = Object.keys(foo).map(function(key) { return foo[key] });
arr.shift()
let max = Math.max.apply(null, arr);
console.log(max); // prints 62588

请注意,我必须对您最初发布的对象进行一些更改,因为它不是有效的 javascript。

在对象的属性中获取最小值/最大值的快速方法

不是 100% 确定我理解这个要求,但如果你正在寻找数组中保存的对象的最大值,这样的事情可能会奏效。

 let dataArray = [ {ID: "object1", firstValue:7, secondValue:1}, {ID: "object2", firstValue:3, secondValue:10} ] let maxFirstValue = 0; let maxSecondValue = 0; for (let i = 0; i< dataArray.length; i++){ if (dataArray[i].firstValue > maxFirstValue) {maxFirstValue = dataArray[i].firstValue} if (dataArray[i].secondValue > maxSecondValue) {maxSecondValue = dataArray[i].secondValue} } let resultsObject = {firstValue: maxFirstValue, secondValue: maxSecondValue} console.log(resultsObject);

 let foo = [{ date: "Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time)", Catan: 0, Dominion: 1, Codenames: 2, "Terraforming Mars": 3 }, { date: "Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time)", Catan: 3, Dominion: 2, Codenames: 1, "Terraforming Mars": 0 } ]; foo = foo.map(column => { let keys = Object.keys(column); let max = -1; let targetKey = ''; keys.forEach(( keyName, index ) => { if(index > 0){ if(column[keyName] > max){ max = column[keyName]; targetKey = keyName; } } }) return {value: max, key: targetKey} }); console.log("foo", foo);

请让我知道这可不可以帮你。

预期结果

[
 {
  value: 3,
  key: "Terraforming Mars"
 },
 {
  value: 3,
  key: "Catan"
 }
]
function getColumns(object){
    //columns:
    const columns = [];
    
    const keys = Object.keys(object[Object.keys(object)[0]]);
    keys.forEach(key => columns.push([]));
    /* keys.shift(); //because you don't want the "date" */
    
    let i = 0; // to move between the arrays of "columns"
    for(id in object){
        keys.forEach(key => {
            console.log(i, key, object[id][key]);
            columns[i].push(object[id][key]);
            i++;
        })
        console.log("-----------");
        i = 0;
    }
    
    return columns;
    }
    
    function MathMaxes(array){
        //is a private function for you <3
        const result = array.map(column=> Math.max(...column));
        return result;
    }

//the testing object
const data = {
    1:{
        date: "Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time)", 
        Catan: 23432, 
        Dominion: 2233, 
        Codenames: 111, 
        "Terraforming Mars": 2344
    },
    2:{
        date: "Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time)", 
        Catan: 1123, 
        Dominion: 353, 
        Codenames: 54645, 
        "Terraforming Mars": 2333
    },
    3:{
        date: "Mon Oct 31 2016 19:00:00 GMT-0500 (Central Daylight Time)", 
        Catan: 34673, 
        Dominion: 34532, 
        Codenames: 6457, 
        "Terraforming Mars": 1231
    }
}


const columns = getColumns(data);
columns.shift(); //because you don't want the dates
const theMaxes = MathMaxes(columns);
console.log(theMaxes);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM