Как я могу преобразовать этот объект объектов в массив объектов?

1

Как я могу преобразовать этот объект:

var json = {
    "user3" : {
        "id" : 1
    },
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    }
}

к этому массиву:

var json = [{
        "name": "user1",
        "id": 3
    }, {
        "name": "user2",
        "id": 6
    }, {
        "name": "user3",
        "id": 1
    }];

Может кто-нибудь мне сказать? Или как я могу отсортировать объект, как в первом примере?

Теги:
arrays
type-conversion

4 ответа

2
Лучший ответ

Пытаться

const src = {
    "user3" : {
        "id" : 1
    },
    "user1" : {
        "id" : 3
    },
    "user2" : {
        "id" : 6
    }
}

const out = Object.keys(src).map((key) => ({name: key, id: src[key].id}))
  • 1
    Ах, ты прав. Картирование намного проще ^^
  • 0
    Спасибо. Да, карта проще по определению
0

Альтернативный подход с использованием цикла for-in:

const json = {
    "user3": {
        "id": 1
    },
    "user1": {
        "id": 3
    },
    "user2": {
        "id": 6
    }
}

const result = [];

for (const prop in json) {
    result.push({ "name": prop, "id": json[prop].id });
}

console.log(result);

Будет предоставлять:

[ { name: 'user3', id: 1 },
  { name: 'user1', id: 3 },
  { name: 'user2', id: 6 } ]
0

Вы можете использовать Object.entries для преобразования объекта в массив. Используйте map для циклы через массив и используйте Object.assign для создания нового объекта.

var json = {
  "user3": {
    "id": 1
  },
  "user1": {
    "id": 3
  },
  "user2": {
    "id": 6
  }
}

var result = Object.entries(json).map(([k, o]) =>Object.assign(o, {name: k}));

console.log(result);
0

Вы можете использовать Object.keys() и Array.prototype.reduce() для перебора элементов объекта и создания массива из отдельных элементов.

Object.keys(json).reduce((items, username) => {
const user = json[username];
   return items.concat({
      name: username,
      id: user.id
   });
}, []);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню