Измените массив объектов на новый массив объектов в JavaScript - PullRequest
0 голосов
/ 26 мая 2020

Я хотел бы как преобразовать объект в массив объектов в JavaScript. В объекте obj поля должны быть изменены на вложенный массив объектов в JavaScript.

var obj = [{
  id: 1,
  fields: {
    color: "white",
    brand: "xyz"
  }
}]

function objarray(obj) {
  return obj.map(e => ({
    label: Object.keys(e.fields)
  }))
}

var result = objarray(obj);
console.log(result);

Ожидаемый результат:

  [
    {
      label: "color",
      children: [{label:"white" }]
    },
    {
      label: "brand",
      children: [{label:"xyz" }]
    }
  ]

Ответы [ 3 ]

0 голосов
/ 26 мая 2020

Это должно сработать

var obj = [{
  id: 1,
  fields: {
    color: "white",
    brand: "xyz"
  }
}]

const mapFields = (obj) => {
  return obj.map((o) => {
    return Object.keys(o.fields).map((f) => {
      var field = {
        label: f,
        children: [{label: o.fields[f]}]
      };
      return field;
    });
  })
}

console.log(mapFields(obj));
0 голосов
/ 26 мая 2020

Вы можете сделать это, используя Object.entries():

var obj = [ { id: 1, fields: { color: "white", brand: "xyz" } }];

result = Object.entries(obj[0].fields).map(([k,v])=>({label:k, children:[{label:v}]}))

console.log(result)
0 голосов
/ 26 мая 2020

Obj.map не будет работать, поскольку obj - это массив с одним элементом, поэтому он будет повторяться только один раз.

let newArray = []
for (var i in obj.fields)
{
    newArray.push({label: i, children:obj[[0].fields.i});
}

Я сомневаюсь, что это будет компилироваться. Я подозреваю, что i здесь является объектом и не может использоваться в качестве ссылки на obj [0] .fields.

, но вы поняли идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...