Как найти наибольшее значение для столбца, вложенного в JSON?

#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);