#javascript #d3.js
#javascript #d3.js
Вопрос:
Я хочу найти максимальное значение в объекте JSON. Это мои данные-
(3) [{…}, {…}, {…}]
0: {name: "a", value: 12}
1: {name: "b", value: 28}
2: {name: "c", value: 60}
Я хотел бы получить максимальное значение, но они вложены. Я мог бы сделать что-то вроде этого
arr = {}
for (x in jsonObj){
arr.push(x.value)
}
d3.max(arr)
Мне было любопытно, есть ли лучший способ справиться с этой ситуацией. Моя цель — использовать d3.max(), чтобы найти наибольшее значение.
Комментарии:
1. Я добавляю примечание, что объект не является массивом. Он анализируется с помощью
d3.json()
и в разделе конструктор > имя написано «Объект».
Ответ №1:
Хотя другие ответы Хриши и Нины Шольц совершенно хороши, я хотел бы упомянуть, что идиоматический способ использования D3 заключается в использовании d3.max()
. Вы можете передать функцию доступа в качестве второго аргумента, которая будет вызываться для каждого элемента массива и возвращает вложенное значение, которое вас интересует.
const data = [
{name: "a", value: 12},
{name: "b", value: 28},
{name: "c", value: 60}
];
const maxValue = d3.max(data, d => d.value);
// accessor function ---^
console.log(maxValue); // 60
<script src="https://d3js.org/d3.v5.js"></script>
Комментарии:
1. S.O. демократическая система нарушена: этот ваш ответ, который очень-очень прост (скажем, это D3 101), теперь имеет 3 положительных голоса (один из них мой)… Тем не менее, я нашел ваши ответы, которые намного сложнее и детализированы, без единого повышения. Поди разберись…
2. @GerardoFurtado Вот почему у нас представительные демократии, и даже они знавали лучшие дни…
Ответ №2:
array = [
{ name: "a", value: 12 },
{ name: "b", value: 28 },
{ name: "c", value: 60 },
]
console.log(Math.max.apply(Math, array.map(function (e) { return e.value; })));
Комментарии:
1. Вы можете использовать ds = array.map(функция (e) { возвращает e.значение; }, чтобы создать свой массив d3, а затем вы можете использовать Math.max (…ds);
2. Это не работает, поскольку объект не является массивом. Он анализируется из объекта JSON.
3. @Cauder вы можете превратить объект в массив, используя
Object.values(obj)
Ответ №3:
Вы могли бы уменьшить массив, взяв действительно маленькое значение в качестве начального значения и получить максимальное значение аккумулятора и значение.
var array = [{ name: "a", value: 12 }, { name: "b", value: 28 }, { name: "c", value: 60 }],
max = array.reduce((max, { value }) => Math.max(max, value), -Infinity);
console.log(max);