我有这样的数据:
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}] ]
我想在这个数据中获得相同索引的最大值,所以我希望结果如下:
[55, 83, 150]
现在,我可以获取对象中的每个值,如果指定索引,我可以获得最大值.我不确定如何使用每个索引.
let array = []; data.map((eachArr, index) => { array.push(eachArr[0].value) for(let i = 0; i < eachArr.length; i++){ console.log('eachArr[i].value', eachArr[i].value, i); } }) console.log(Math.max(...array)) ===> 55
我怎样才能做到这一点?
我认为人们误解了我的问题.我不想要每个数组的最大值.我希望value
每个数组中具有相同索引的最大值.所以我希望55,13,55,83分别来自39分,83分,9分和150分,分别是150分,12分,1分.我很抱歉没有具体.我应该有一个不同长度的例子.
使用Array#reduce
方法和Array#forEach
方法.
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 }]];
console.log(
// iterate over the array
data.reduce(function(arr, ele) {
// iterate over the inner array
ele.forEach(function(o, i) {
// check element present at the index, if not then update with current value
arr[i] = arr[i] || o.value;
// check assign greatest value by comparing with previous value
arr[i] = arr[i] < o.value ? o.value : arr[i];
// you can combine above two lines
// arr[i] = !arr[i] || arr[i] < o.value ? o.value : arr[i];
});
// return the array reference
return arr;
// set initial value as an empty array
}, [])
)
// without any comments
console.log(
data.reduce(function(arr, ele) {
ele.forEach(function(o, i) {
arr[i] = !arr[i] || arr[i] < o.value ? o.value : arr[i];
});
return arr;
}, [])
)