0

As title, purpose is to get array with no duplicated name and value is max.

var data=[{name:'A',value:3},{name:'B',value:5},{name:'A',value:7},{name:'B',value:1},{name:'B',value:12},{name:'A',value:4}];

expected output:

var newData=[];
newData=[{name:'A',value:7},{name:'B',value:12}];

Thanks in advance

Paul Wu
  • 27
  • 3

1 Answers1

1

1. solution using forEach, Math.max

var data = [
  { name: "A", value: 3 },
  { name: "B", value: 5 },
  { name: "A", value: 7 },
  { name: "B", value: 1 },
  { name: "B", value: 12 },
  { name: "A", value: 4 },
];

const dict = {};
data.forEach(({ name, value }) => {
  dict[name] = Math.max(value, dict[name] ?? Number.MIN_VALUE);
});

const result = Object.entries(dict).map((o) => {
  const [name, value] = o;
  return { name, value };
});

console.log(result);

2. Using simple forEach and if condition.

var data = [{
    name: "A",
    value: 3
  },
  {
    name: "B",
    value: 5
  },
  {
    name: "A",
    value: 7
  },
  {
    name: "B",
    value: 1
  },
  {
    name: "B",
    value: 12
  },
  {
    name: "A",
    value: 4
  },
];

const dict = {};
data.forEach(({ name, value }) => {
  if (dict[name]) {
    if (dict[name] < value) dict[name] = value;
  } else {
    dict[name] = value;
  }
});

const result = Object.entries(dict).map((o) => {
  const [name, value] = o;
  return { name, value };
});

console.log(result);
DecPK
  • 24,537
  • 6
  • 26
  • 42