Как преобразовать объект {} в массив [] пар ключ-значение в 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?
Ответы
Ответ 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]);
}