I have data like this:
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}]
]
I want to get the largest value at the same index in this data, so I want the result to be like this:
[55, 83, 150]
Right now, I can get each value in objects, and I can get the largest value if I specify the index. I am not sure how to do it with every index.
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
How can I do this?
I think people misunderstood my question. I do not want the largest value from each array. I want the largest value of value with the same index in every array. So I want 55 from 12, 15, 55, 83 from 39, 83, 9, and 150 from 150, 12, 1. I am sorry for not being specific. I should have an example with different length.
Use Array#reduce method with Array#forEach method.
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;
}, [])
)
With ES6 arrow function :
let 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.reduce((arr, ele) => (ele.forEach((o, i) => arr[i] = !arr[i] || arr[i] < o.value ? o.value : arr[i]), arr), [])
)
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 res = [];
for (var i = 0; i < data.length; i++) {
for (var j = 0; j < data[i].length; j++) {
res[j] = !res[j] || res[j] < data[i][j].value ? data[i][j].value : res[j];
}
}
console.log(res);
FYI : Performance comparison
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With