Подтвердить что ты не робот

Как преобразовать объект {} в массив [] пар ключ-значение в JavaScript

Я хочу преобразовать объект следующим образом:

{"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}

в массив пар ключ-значение, как это:

[[1,5],[2,7],[3,0],[4,0]...].

Как я могу преобразовать Объект в Массив пар ключ-значение в JavaScript?

4b9b3361

Ответ 1

Вы можете использовать Object.keys() и map() сделать это

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}
var result = Object.keys(obj).map(function(key) {
  return [Number(key), obj[key]];
});

console.log(result);

Ответ 2

Лучший способ это сделать:

var obj ={"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10"‌​:0,"11":0,"12":0} 
Object.entries(obj);

Как показано здесь, вызывающие entries, как показано здесь, будут возвращать пары [key, value].

В качестве альтернативы вы можете вызвать Object.values(obj), который будет возвращать только значения.

Ответ 3

Object.entries() возвращает массив, элементы которого являются массивами, соответствующими перечисляемым парам свойств [key, value] найденным непосредственно на object. Порядок свойств такой же, как и при циклическом переключении значений свойств объекта вручную.

- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries#Description

Функция Object.entries возвращает почти тот результат, который вы запрашиваете, за исключением того, что ключи являются строками, а не числами.

const obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};

console.log(Object.entries(obj));

Ответ 4

Еще одно решение, если Object.entries не будет работать для вас.

const obj = {
      '1': 29,
      '2': 42
    };
const arr = Array.from(Object.keys(obj), k=>['${k}', obj[k]]);
console.log(arr);

Ответ 5

Напомним, некоторые из этих ответов теперь на 2018 году, где ES6 является стандартом.

Начиная с объекта:

let const={"1":9,"2":8,"3":7,"4":6,"5":5,"6":4,"7":3,"8":2,"9":1,"10":0,"12":5};
  • Просто слепо получая значения в массиве, не заботьтесь о ключах:

const obj={"1":9,"2":8,"3":7,"4":6,"5":5,"6":4,"7":3,"8":2,"9":1,"10":0,"12":5};
console.log(Object.values(obj));
//[9,8,7,6,5,4,3,2,1,0,5]

Ответ 6

Используйте Object.keys и Array#map.

var obj = {
  "1": 5,
  "2": 7,
  "3": 0,
  "4": 0,
  "5": 0,
  "6": 0,
  "7": 0,
  "8": 0,
  "9": 0,
  "10": 0,
  "11": 0,
  "12": 0
};
// get all object property names
var res = Object.keys(obj)
  // iterate over them and generate the array
  .map(function(k) {
    // generate the array element 
    return [+k, obj[k]];
  });

console.log(res);

Ответ 7

В Ecmascript 6

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0};

var res = Object.entries(obj);

console.log(res);

скрипка

Ответ 8

Используйте Object.entries чтобы получить каждый элемент Object в формате key & value, затем map их следующим образом:

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}

var res = Object.entries(obj).map(([k, v]) => ([Number(k), v]));

console.log(res);

Ответ 9

Если вы используете lodash, это может быть так просто:

var arr = _.values(obj);

Ответ 10

С lodash, в дополнение к ответу, приведенному выше, вы также можете иметь ключ в массиве вывода.

Без ключей объекта в выходном массиве

за:

const array = _.values(obj);

Если obj следующее:

{ "art": { id: 1,  title: "aaaa" }, "fiction": { id: 22,  title: "7777"} }

Тогда массив будет:

[ { id: 1, title: "aaaa" }, { id: 22, title: "7777" } ]

С ключами объекта в выходном массиве

Если вы пишете вместо этого ("жанр" - строка, которую вы выбираете):

const array= _.map(obj, (val, id) => {
    return { ...val, genre: key };
  });

Ты получишь:

[ 
  { id: 1, title: "aaaa" , genre: "art"}, 
  { id: 22, title: "7777", genre: "fiction" }
]

Ответ 11

Откройте Lodash библиотеку toPairs(), выполните именно то, что вам нужно.

Ответ 12

Реализация ES6 (ES2015) с использованием Set

Вы можете использовать либо Array.from(), либо синтаксис Spread

Пример Array.from()

const names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
const uniqueNames = Array.from(new Set(names));
console.log(uniqueNames);

Пример распространения синтаксиса

const names = ["Mike","Matt","Nancy","Adam","Jenny","Nancy","Carl"];
const uniqueNames = [...new Set(names)];
console.log(uniqueNames);

Ответ 13

Используйте для

var obj = { "10":5, "2":7, "3":0, "4":0, "5":0, "6":0, "7":0,
            "8":0, "9":0, "10":0, "11":0, "12":0 };

var objectToArray = function(obj) {
    var _arr = [];

    for (var key in obj) {
        _arr.push([key, obj[key]]);
    }
    return _arr;
}

console.log(objectToArray(obj));

Ответ 14

Рекурсивный объект преобразования в массив

function is_object(mixed_var) {
    if (mixed_var instanceof Array) {
        return false;
    } else {
        return (mixed_var !== null) && (typeof( mixed_var ) == 'object');
    }
}


function objectToArray(obj) {
    var array = [], tempObject;
    for (var key in obj) {

        tempObject = obj[key];

        if (is_object(obj[key])) {
            tempObject = objectToArray(obj[key]);
        }
        array[key] = tempObject;
    }
    return array;
}

Ответ 15

Мы можем изменить Number на String для Key, как показано ниже:

var obj = {"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}
var result = Object.keys(obj).map(function(key) {
  return [String(key), obj[key]];
});
    
console.log(result);

Ответ 16

  Это мое решение, у меня та же проблема, и кажется, что это решение работает для меня.

yourObj = [].concat(yourObj);

Ответ 17

Вы можете использовать _.castArray(obj).

пример: _.castArray({ 'a': 1 });//=> [{ 'a': 1 }] _.castArray({ 'a': 1 });//=> [{ 'a': 1 }]

Ответ 18

var json = '{"1":5,"2":7,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0}';

var parsed = JSON.parse(json);

var arr = [];

for(var x in parsed){
  arr.push(parsed[x]);
}