所以我有这样的数据:
data = [
[{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
[{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
[{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
]
我希望在每个对象数组中获得最大值。所以结果应该是这样的:
maxValues = [150, 83, 55]
现在我的代码是:
let maxValues = []
let tmp;
let highest = Number.NEGATIVE_INFINITY;
data.map((eachArr, index) => {
for(let i = eachArr.length -1; i >= 0; i--){
tmp = eachArr[i].value;
if(tmp > highest) highest = tmp;
}
maxValues.push(highest)
})
,结果是
maxValues = [150, 150, 150]
我怎样才能做到这一点?
答案 0 :(得分:18)
您可以使用spread syntax并获取映射value
的最大值。
扩展语法允许在需要多个参数(用于函数调用)或多个元素(用于数组文字)或多个变量(用于解构赋值)的位置扩展表达式。
var data = [[{ a: "b", value: 12}, {a: "bb", value: 39 }, {a: "bb", value: 150 }], [{ a: "c", value: 15}, {a: "cc", value: 83 }, {a: "ccc", value: 12 }], [{ a: "d", value: 55}, {a: "dd", value: 9 }, {a: "dd", value: 1 }]],
result = data.map(a => Math.max(...a.map(b => b.value)));
console.log(result);
答案 1 :(得分:7)
您必须在let highest = Number.NEGATIVE_INFINITY;
功能中添加forEach
,因为您必须在highest
的每一组中设置array
。
data = [
[{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
[{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
[{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
]
let maxValues = []
let tmp;
data.forEach((eachArr, index) => {
let highest = Number.NEGATIVE_INFINITY;
for(let i = eachArr.length -1; i >= 0; i--){
tmp = eachArr[i].value;
if(tmp > highest) highest = tmp;
}
maxValues.push(highest)
})
console.log(maxValues);
答案 2 :(得分:4)
具有Math.max.apply()
和Array.prototype.map()
功能的Ecmascript 5解决方案:
var data = [
[{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
[{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
[{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
];
var maxValues = data.map(function (arr) {
return Math.max.apply(null, arr.map(function(o){ return o.value; }));
});
console.log(maxValues);

Math.max.apply()函数将返回给定数字中的最大值。
数字(每个嵌套对象的value
属性)通过 Array.prototype.map()功能。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
答案 3 :(得分:3)
使用Array#map
迭代数组,生成数组元素,使用Array#reduce
查找包含最大值的对象,然后检索其value属性。
data.map(arr => arr.reduce((a, b) => a.value < b.value ? b : a).value)
data = [
[{
a: "b",
value: 12
}, {
a: "bb",
value: 39
}, {
a: "bb",
value: 150
}],
[{
a: "c",
value: 15
}, {
a: "cc",
value: 83
}, {
a: "ccc",
value: 12
}],
[{
a: "d",
value: 55
}, {
a: "dd",
value: 9
}, {
a: "dd",
value: 1
}]
]
console.log(
data.map((arr) => arr.reduce((a, b) => a.value < b.value ? b : a).value)
)
data.map(function(arr){
return arr.reduce(function(a, b){
return a.value < b.value ? b : a
}).value;
});
答案 4 :(得分:2)
Whitout ES6
_(data).map( function (item){
var max = _(item).max( function( hash ){ return hash.value })
return max.value
});
使用ES6
_(data).map((item) => _(item).max(( hash ) => hash.value).value);