我的应用程序创建了一个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);});
有没有更好的方法将对象转换为数组或函数?
18 回答
输出:
如果您正在寻找功能性方法:
结果是:
与ES6箭头功能相同:
使用ES7,您将能够使用
Object.values
(more information):或者如果您已经在使用Underscore / Lo-Dash:
我想你可以使用
for in
,但检查属性是否没有任何限制编辑 - 如果你想要你也可以保留你的对象的索引,但你必须检查它们是否是数字(并且你得到缺少索引的未定义值:
简单地做
就这样!
如果您知道对象中的最大索引,则可以执行以下操作:
由于ES5 Object.keys()返回一个包含直接在对象上定义的属性的数组(不包括在原型链中定义的属性):
ES6通过箭头功能更进一步:
最好的方法是使用javascript -only函数:
ECMASCRIPT 5:
ECMASCRIPT 2015 or ES6:
如今,有一种简单的方法: Object.values() .
输出:
这不是在ECMAScript 2017中定义的 .
每个现代浏览器都支持它(忘记IE) .
jQuery.makeArray(obj)
怎么样这就是我在我的应用程序中做到的方式 .
解决方法非常简单
小提琴演示
扩展回答bjornd .
参考
Array.prototype.slice()
Function.prototype.apply()
Object.prototype.hasOwnProperty()
Object.keys()
如果要将对象属性的名称保留为值 . 例:
使用
Object.keys()
,Array.map()
和Object.assign()
:结果:
说明:
Object.keys()
枚举源的所有属性;.map()
将=>
函数应用于每个属性并返回一个数组;Object.assign()
合并每个属性的名称和值 .我做了一个自定义功能:
经过一些测试,这里是数组函数转换器的一般对象:
You have the object:
The function:
Function Use:
You Get:
那么你可以达到所有键和值,如:
Result in console:
或者以原型形式:
And then use like:
您可以创建一个简单的函数来执行从
object
到array
的转换,这样的事情可以使用纯javascript为您完成工作:或者这个:
并调用并使用如下函数:
同样在将来我们将会有一个名为
Object.values(obj)
的东西,类似于Object.keys(obj)
,它将为您返回作为数组的所有属性,但在许多浏览器中尚不支持...ES8 way 变得容易:
The official documentation