0

I have a object like this :

totalProduct = [{name: "A", string: "Hello"}, {name: "A", string: "Hello"}, {name: "B", string: "Hey"}];

I calculate the total of the same name. So far everything is fine, I did this :

let counts = {};
for (const i in totalProduct) {
  const nameObject = totalProduct[i].name;
  const stringObject = totalProduct[i].string;

  counts[nameObject] = (counts[nameObject]||0) + 1;
}

The output is this :

{A:2, B:1}

BUT, i would like to have this output (Put the object value inside of an array with a string), but i don't know how to do this :(

{A:[2, 'Hello'], B:[1, 'Hey']}

I'have tried to do this but it's not working :

let counts = {};
for (const i in totalProduct) {
  const nameObject = totalProduct[i].name;
  const stringObject = totalProduct[i].string;

  counts[nameObject] = [(counts[nameObject]||0) + 1, stringObject];
}
6
  • 1
    From where these string objects came from? Commented Feb 23, 2021 at 18:04
  • That is, the Hello and Hey, where do they originate? Commented Feb 23, 2021 at 18:05
  • The Hello and Hey come from const stringObject = totalProduct[i].string; Commented Feb 23, 2021 at 18:07
  • totalProduct = [{name: "A"}, {name: "A"}, {name: "B"}]; this does not have a property string Commented Feb 23, 2021 at 18:10
  • for every object with value A on its name property, they will also have the same string value? Could there be { name : 'A', string: 'Hello' } and { name : 'A', string: 'Hey' } ? Commented Feb 23, 2021 at 18:10

2 Answers 2

1

You need to set counts[nameObject] to an array of two elements

const totalProduct = [{name: "A", string: "Hello"}, {name: "A", string: "Hello"}, {name: "B", string: "Hey"}];

let counts = {};
for (const i in totalProduct) {
  const nameObject = totalProduct[i].name;
  const stringObject = totalProduct[i].string;
  const prevObj = counts[nameObject]
  counts[nameObject] = [(prevObj ? prevObj[0] : 0) + 1, stringObject];
}
console.log(counts);

Sign up to request clarification or add additional context in comments.

Comments

1

When iterating over the array, instead of putting just the count as the value in the object, put the [number, string] array (like your desired object) onto the object. On each iteration, create the array inside the object if the property doesn't exist yet, and then increment the [0]th item in the array regardless:

const arr = [{name: "A", string: 'Hello'}, {name: "A", string: 'Hello'}, {name: "B", string: 'Hey'}];

const obj = {};
for (const { name, string } of arr) {
  if (!obj[name]) obj[name] = [0, string];
  obj[name][0]++;
}
console.log(obj);

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.