我試圖找到一個方法來比較數組中每個觀察的多個(未知數,但相同長度)數組的最大值,返回一個數組與最大值。查找比較每個索引的多個數組的最大值
實施例:
EDIT:
A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2], etc......]
返回
MAX = [2.2, 5.3, 5.2]
能夠檢查該「input'陣列具有相同的長度,但不能夠以比較數組發現最大....?
我試圖找到一個方法來比較數組中每個觀察的多個(未知數,但相同長度)數組的最大值,返回一個數組與最大值。查找比較每個索引的多個數組的最大值
實施例:
EDIT:
A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2], etc......]
返回
MAX = [2.2, 5.3, 5.2]
能夠檢查該「input'陣列具有相同的長度,但不能夠以比較數組發現最大....?
對於數組的每個索引,創建一個包含「列」中的所有元素的數組,並查找這些值的最大值。返回生成的數組。示例用法:maxValues(A)
將提供所需的結果。
function maxValues(array) {
var maxArray = [];
var length = array[0].length;
for (var i = 0; i < length; i++) {
var ithColumn = [].map.call(array, function(array) {
return array[i];
});
maxArray.push(Math.max.apply(null, ithColumn));
}
return maxArray;
}
抱歉,我的輸入數組錯了。請參閱編輯.. – 2014-11-25 01:52:43
已更新。 – openorclose 2014-11-25 01:56:31
謝謝openorclose!請有人upvote正確的答案。 – 2014-11-25 02:01:39
var data = [
[2.2, 3.3, 1.3],
[1.2, 5.3, 2.2],
[0.3, 2.2, 5.2]
];
function maxAtIndex (data) {
//output
var maxArray = [];
//loop arrays passed in
for (var i = 0; i < data[0].length; i++) {
var possibleValues = [];
//get value in array at index
for (var j = 0; j < data.length; j++) {
possibleValues.push(data[j][i]);
}
//get the highest from possible values
var highest = Math.max.apply(null, possibleValues);
//store in output array
maxArray.push(highest);
}
return maxArray;
};
console.log(maxAtIndex(data)); //[ 2.2, 5.3, 5.2 ]
謝謝jmfolds!請有人upvote正確的答案 – 2014-11-25 02:01:55
你可以使用Array.reduce()
:
var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];
var max = A.reduce(function(final, current) {
for (var i = 0; i < final.length; ++i) {
if (current[i] > final[i]) {
final[i] = current[i];
}
}
return final;
});
console.log(max);
內部功能當前最大的下一個數組元素比較等final
總是適用於所有的最大值到目前爲止遍歷的元素。
您可以將羅Dash的zip和map方法來做到這一點的代碼短短的幾行:
var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];
// Creates an array of arrays, where the first array is all the first elements,
// the second array is all the second elements, etc.
var zipped = _.zip(A);
var maxes = _.map(zipped, function(arr) {
return _.max(arr);
});
console.log(maxes);
你的答案有一個錯字:因爲lodash的_.zip界面改變了,你必須用'_.zip.apply(null,A)'應用它。 – APerson 2016-08-10 14:55:05
這裏有一個簡短而親切的版本:
var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];
var maxA = A.map(a => Math.max.apply(null, a));
我把Tom Panning's answer和更簡化它:
var A = [[2.2, 3.3, 1.3], [1.2, 5.3, 2.2], [0.3, 2.2, 5.2]];
var MAX = _.zip.apply(null, A).map(_.max);
你不是指'MAX = [3.3, 5.3,5.2]'? – Fresheyeball 2014-11-25 00:41:06
@Fresheyeball:不,我想比較A [0]與B [0]與C [0] ..和A [1]與B [1]與C [1]等。不找最大值值在每個數組中,但在整個數組中爲0:length-1 ... – 2014-11-25 00:45:16
您應該創建一個數組數組,用於查找最大數。 – 2014-11-25 00:45:27