简体   繁体   English

如何在JS中将对象转换为数组列表

[英]how do I convert an object to an array list in JS

I have a problem with my code it has a running error I am trying to convert an object to an array list. 我的代码有问题,它有运行错误,我正在尝试将对象转换为数组列表。 In my code, I was trying to build an array inside an array! 在我的代码中,我试图在数组内部构建一个数组! I was expecting to have a return value as the following: 我期望具有以下返回值:

[['name', 'Holly'], ['age' , 35], ['role', 'producer' ],

['species', 'canine'], ['name', 'Bowser'], ['weight', 45]] 

I will appreciate any help or advice thanks. 我将不胜感激任何帮助或建议。

 var obj1 = { name: 'Holly', age: 35, role: 'producer' }; var obj2 = { species: 'canine', name: 'Bowser', weight: '45' }; function convertObjectToList(obj) { var arrayExt = []; // declare my external array container var arrayInt = []; // declare my internal arrays container var objKeys = Object.getOwnPropertyNames(obj); // returns all properties (enumerable or not) found directly upon a given object. for (var k in obj) { if (var i = 0; i < objKeys.length; i++); arrayInt = []; arrayInt.push(obj(objKeys[k])); arrayExt.push(arrayInt); console.log(arrayExt); } } convertObjectToList(obj); 

This should do the trick? 这应该做的把戏吗?

  var obj1 = { name: 'Holly', age: 35, role: 'producer' }; var obj2 = { species: 'canine', name: 'Bowser', weight: '45'}; function convertObj(obj) { var result = []; for (var key in obj) { result.push([key, obj[key]]) } return result; } console.log(convertObj(obj1)) console.log(convertObj(obj2)) 

Gives (NodeJS): 提供(NodeJS):

> convertObj(obj1)
[ [ 'name', 'Holly' ],
  [ 'age', 35 ],
  [ 'role', 'producer' ] ]

With ECMAScript2017 you can use Object.entries or a traditional "for in" loop 借助ECMAScript2017,您可以使用Object.entries或传统的“ for in”循环

 var obj1 = { name: 'Holly', age: 35, role: 'producer' }; var obj2 = { species: 'canine', name: 'Bowser', weight: '45' }; var arr1 = Object.entries(obj1) console.log(arr1); var arr2 = Object.entries(obj2) console.log(arr2); //traditional for in loop var tr1 = []; for (let iter in obj1) { tr1.push([iter, obj1[iter]]) } console.log(tr1); var tr2 = []; for (let iter in obj2) { tr2.push([iter, obj2[iter]]) } console.log(tr2); 

You can just use a use a combination of Object.keys , Array.map , and Array.concat 您可以只使用Object.keysArray.mapArray.concat

 function toArray(obj) { return Object.keys(obj).map(k => [k, obj[k]]); } var obj1 = { name: 'Holly', age: 35, role: 'producer' }; var obj2 = { species: 'canine', name: 'Bowser', weight: '45'}; console.log(toArray(obj1).concat(toArray(obj2))) 

In general, you should avoid for...in loops. 通常,应避免for...in循环。 There are many better alternatives now. 现在有许多更好的选择。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM