我想像这样转换一个对象:
{"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":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中的键值对数组?
当前回答
递归转换对象到数组
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;
}
其他回答
这是我的解决方案,我有同样的问题,似乎这个解决方案为我工作。
yourObj = [].concat(yourObj);
你可以使用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((key) => [Number(key), obj[key]]); 控制台.log(结果);
使用对象。以键值格式获取Object的每个元素,然后像这样映射它们:
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);
但是,如果你确定键是按递进顺序排列的,你可以使用Object。values和Array#map来做这样的事情:
var obj ={“2”,“1”:5:7,“3”:0,“4”:0,“5”:0,“6”:0,“7”:0,“8”:0,“9”:0,“10”:0,“11”:0,“12”:0}; // idx是索引,你可以使用任何逻辑来增加它(从0开始) let result = Object.values(obj)。Map ((e, idx) => ([++idx, e])); console.log(结果);
或者你可以使用Object.assign():
Const obj = {0: 1,1: 2,2: 3}; const arr =对象。分配([],obj); console.log (arr) // arr是[1,2,3]
在ES6成为标准的2018年,我们来回顾一下这些答案。
从对象开始:
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]
简单地获取数组上的对:
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.entries(obj)); [["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.entries(obj).map(([k,v])=>[+k,v])); [[1,9],[2,8],[3,7],[4,6],[5,5],[6,4],[7,3],[8,2],[9,1],[10,0],[12,5]]
使用object属性作为新数组的键(可以创建稀疏数组):
几点obj ={1: 9、“2”:8、“3”:7、“4”:6:5,“6”4、“7”:3、“8”2、“9”:1、“10”:0 12:5); 控制台日志对象。。(obj)。减少(这是[k, v) = > [k] = v,(这个),[]); - [undefined, 9,8,7,6,5,4,3,2,1,0 undefined,章5段]
最后一个方法,它还可以根据键的值重新组织数组的顺序。有时这可能是期望的行为(有时不是)。但是现在的优点是值在正确的数组槽上建立索引,这对于在它上进行搜索至关重要。
用Map代替Array
最后(不是最初问题的一部分,但为了完整性),如果你需要使用键或值轻松搜索,但你不想要稀疏数组,没有重复,没有重新排序,而不需要转换为数字键(甚至可以访问非常复杂的键),那么数组(或对象)不是你需要的。我推荐Map:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
let r=new Map(Object.entries(obj));
r.get("4"); //6
r.has(8); //true