使用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一个简单的函数来完成从object到array的转换,像这样的东西可以为你使用纯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返回所有的属性,但在许多浏览器中不支持…