0

I have an array of objects with multiple properties. I want to be able to make the property's key a value and assign a new key to my value.

My code:

var list = [
  {
    you: 100,
    me: 75,
    foo: 116,
    bar: 15,
  },
  {
    you: 234,
    me: 33,
    foo: 356,
    bar: 1,
  },
  {
    you: 567,
    me: 77,
    foo: 99,
    bar: 20,
  },
];

const func1 = () => {
  let field_arr = [];
  for (const obj of list) {
    field_arr.push(
      { id: "you", value: obj.you },
      { id: "me", value: obj.me },
      { id: "foo", value: obj.foo },
      { id: "bar", value: obj.bar }
    );
  }
  func2(field_arr);
};
const func2 = async (vars) => {
  console.log(vars);
};
func1();

I want my output to be:

[
  { id: 'you', value: 100 },
  { id: 'me', value: 75 },
  { id: 'foo', value: 116 },
  { id: 'bar', value: 15 },
]
[
  { id: 'you', value: 234 },
  { id: 'me', value: 33 },
  { id: 'foo', value: 356 },
  { id: 'bar', value: 1 },
]
[
  { id: 'you', value: 567 },
  { id: 'me', value: 77 },
  { id: 'foo', value: 99 },
  { id: 'bar', value: 20 }
]

1 Answer 1

2

You need to put all the arguments to field_arr.push() into an array. When you give multiple arguments to push(), they're each pushed separately.

var list = [
  {
    you: 100,
    me: 75,
    foo: 116,
    bar: 15,
  },
  {
    you: 234,
    me: 33,
    foo: 356,
    bar: 1,
  },
  {
    you: 567,
    me: 77,
    foo: 99,
    bar: 20,
  },
];

const func1 = () => {
  let field_arr = [];
  for (const obj of list) {
    field_arr.push([
      { id: "you", value: obj.you },
      { id: "me", value: obj.me },
      { id: "foo", value: obj.foo },
      { id: "bar", value: obj.bar }
    ]);
  }
  func2(field_arr);
};
const func2 = async (vars) => {
  console.log(vars);
};
func1();

Also see convert object to array of objects for how you can do this more dynamically, instead of hard-coding all the id values.

Not the answer you're looking for? Browse other questions tagged or ask your own question.