使用jQuery将JS对象转换为数组

我的应用程序创build一个JavaScript对象,如下所示:

myObj= {1:[Array-Data], 2:[Array-Data]} 

但是我需要这个对象作为一个数组。

 array[1]:[Array-Data] array[2]:[Array-Data] 

所以我试图将这个对象转换为一个数组,通过迭代$.each通过对象,并添加到一个数组元素:

 x=[] $.each(myObj, function(i,n) { x.push(n);}); 

有没有更好的方法将对象转换为数组或可能是一个函数?

 var myObj = { 1: [1, 2, 3], 2: [4, 5, 6] }; var array = $.map(myObj, function(value, index) { return [value]; }); console.log(array); 

输出:

 [[1, 2, 3], [4, 5, 6]] 

如果您正在寻找function性方法:

 var obj = {1: 11, 2: 22}; var arr = Object.keys(obj).map(function (key) { return obj[key]; }); 

结果是:

 [11, 22] 

与ES6箭头function一样:

 Object.keys(obj).map(key => obj[key]) 

使用ES7,您将可以使用Object.values ( 更多信息 ):

 var arr = Object.values(obj); 

或者如果您已经在使用Underscore / Lo-Dash:

 var arr = _.values(obj) 

我认为你可以使用for in但检查财产是否没有inerithed

 myObj= {1:[Array-Data], 2:[Array-Data]} var arr =[]; for( var i in myObj ) { if (myObj.hasOwnProperty(i)){ arr.push(myObj[i]); } } 

编辑 – 如果你想要你也可以保留你的对象的索引,但你必须检查它们是否是数字(你得到未定义的值缺失索引:

 function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } myObj= {1:[1,2], 2:[3,4]} var arr =[]; for( var i in myObj ) { if (myObj.hasOwnProperty(i)){ if (isNumber(i)){ arr[i] = myObj[i]; }else{ arr.push(myObj[i]); } } } 

如果您知道对象中的最大索引,则可以执行以下操作:

 var myObj = { 1: ['c', 'd'], 2: ['a', 'b'] }, myArr; myObj.length = 3; //max index + 1 myArr = Array.prototype.slice.apply(myObj); console.log(myArr); //[undefined, ['c', 'd'], ['a', 'b']] 

由于ES5 Object.keys()返回一个包含直接在对象上定义的属性的数组(不包括在原型链中定义的属性):

 Object.keys(yourObject).map(function(key){ return yourObject[key] }); 

ES6使用箭头function更进一步:

 Object.keys(yourObject).map(key => yourObject[key]); 

简单地做

 Object.values(obj); 

就这样!

 x = []; for( var i in myObj ) { x[i] = myObj[i]; } 

最好的方法是使用javascript -only函数:

 var myArr = Array.prototype.slice.call(myObj, 0); 

ECMASCRIPT 5:

 Object.keys(myObj).map(function(x) { return myObj[x]; }) 

ECMASCRIPT 2015或ES6:

 Object.keys(myObj).map(x => myObj[x]) 

如何jQuery.makeArray(obj)

这是我在我的应用程序中做到的。

小提琴演示

扩展到bjornd的答案。

 var myObj = { 1: [1, [2], 3], 2: [4, 5, [6]] }, count = 0, i; //count the JavaScript object length supporting IE < 9 also for (i in myObj) { if (myObj.hasOwnProperty(i)) { count++; } } //count = Object.keys(myObj).length;// but not support IE < 9 myObj.length = count + 1; //max index + 1 myArr = Array.prototype.slice.apply(myObj); console.log(myArr); 

参考

Array.prototype.slice()

Function.prototype.apply的()

Object.prototype.hasOwnProperty()

Object.keys()

解决方法非常简单

 var my_obj = {1:[Array-Data], 2:[Array-Data]} Object.keys(my_obj).map(function(property_name){ return my_obj[property_name]; }); 

我做了一个自定义函数:

  Object.prototype.toArray=function(){ var arr=new Array(); for( var i in this ) { if (this.hasOwnProperty(i)){ arr.push(this[i]); } } return arr; }; 

如果你想保留对象属性的名字作为值。 例:

 var fields = { Name: { type: 'string', maxLength: 50 }, Age: { type: 'number', minValue: 0 } } 

使用Object.keys()Array.map()Object.assign()

 var columns = Object.keys( fields ).map( p => Object.assign( fields[p], {field:p} ) ) 

结果:

 [ { field: 'Name', type: 'string', maxLength: 50 }, { field: 'Age', type: 'number', minValue: 0 } ] 

说明:

Object.keys()枚举源的所有属性; .map()=>函数应用于每个属性并返回一个Array; Object.assign()合并每个属性的名称和值。

经过一些testing,这里是数组函数转换器的一般对象:

你有这个对象:

 var obj = { some_key_1: "some_value_1" some_key_2: "some_value_2" }; 

function:

 function ObjectToArray(o) { var k = Object.getOwnPropertyNames(o); var v = Object.values(o); var c = function(l) { this.k = []; this.v = []; this.length = l; }; var r = new c(k.length); for (var i = 0; i < k.length; i++) { rk[i] = k[i]; rv[i] = v[i]; } return r; } 

function用途:

 var arr = ObjectToArray(obj); 

你得到:

 arr { key: [ "some_key_1", "some_key_2" ], value: [ "some_value_1", "some_value_2" ], length: 2 } 

那么你可以达到所有的键和值:

 for (var i = 0; i < arr.length; i++) { console.log(arr.key[i] + " = " + arr.value[i]); } 

结果在控制台中:

 some_key_1 = some_value_1 some_key_2 = some_value_2 

编辑:

或者以原型forms:

 Object.prototype.objectToArray = function() { if ( typeof this != 'object' || typeof this.length != "undefined" ) { return false; } var k = Object.getOwnPropertyNames(this); var v = Object.values(this); var c = function(l) { this.k = []; this.v = []; this.length = l; }; var r = new c(k.length); for (var i = 0; i < k.length; i++) { rk[i] = k[i]; rv[i] = v[i]; } return r; }; 

然后使用像:

 console.log(obj.objectToArray); 

你也可以使用这个数组/开源组件来使数组变形。

例子:

 makeArray(1) // => [1] makeArray([1]) // => [1] makeArray(null) // => [] 

还有一个NPM的微型封装 。

你可以创build一个简单的函数来完成从objectarray的转换,像这样的东西可以为你使用纯javascript做这个工作:

 var objectToArray = function(obj) { var arr = []; if ('object' !== typeof obj || 'undefined' === typeof obj || Array.isArray(obj)) { return obj; } else { Object.keys(obj).map(x=>arr.push(obj[x])); } return arr; }; 

或者这个:

 var objectToArray = function(obj) { var arr =[]; for(let o in obj) { if (obj.hasOwnProperty(o)) { arr.push(obj[o]); } } return arr; }; 

并调用和使用该function如下:

 var obj = {1:'a', 2:'b', 3:'c', 4:'d', 5:'e'}; objectToArray(obj); // return ["a", "b", "c", "d", "e"] 

同样在将来,我们将会有一个名为Object.values(obj)东西,类似于Object.keys(obj) ,它将以数组的forms返回所有的属性,但在许多浏览器中不支持…