The*_*ndr 412 javascript arrays jquery object
我的应用程序创建了一个JavaScript对象,如下所示:
myObj= {1:[Array-Data], 2:[Array-Data]}
Run Code Online (Sandbox Code Playgroud)
但我需要这个对象作为数组.
array[1]:[Array-Data]
array[2]:[Array-Data]
Run Code Online (Sandbox Code Playgroud)
所以我尝试通过迭代$.each对象并将元素添加到数组来将此对象转换为数组:
x=[]
$.each(myObj, function(i,n) {
x.push(n);});
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法将对象转换为数组或函数?
Joe*_*ard 737
如果您正在寻找功能性方法:
var obj = {1: 11, 2: 22};
var arr = Object.keys(obj).map(function (key) { return obj[key]; });
Run Code Online (Sandbox Code Playgroud)
结果是:
[11, 22]
Run Code Online (Sandbox Code Playgroud)
与ES6箭头功能相同:
Object.keys(obj).map(key => obj[key])
Run Code Online (Sandbox Code Playgroud)
使用ES7,您将能够使用Object.values(更多信息):
var arr = Object.values(obj);
Run Code Online (Sandbox Code Playgroud)
或者如果您已经在使用Underscore/Lo-Dash:
var arr = _.values(obj)
Run Code Online (Sandbox Code Playgroud)
Dog*_*ert 424
var myObj = {
1: [1, 2, 3],
2: [4, 5, 6]
};
var array = $.map(myObj, function(value, index) {
return [value];
});
console.log(array);
Run Code Online (Sandbox Code Playgroud)
输出:
[[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
Nic*_*tti 30
我认为你可以使用,for in但检查财产是否没有任何限制
myObj= {1:[Array-Data], 2:[Array-Data]}
var arr =[];
for( var i in myObj ) {
if (myObj.hasOwnProperty(i)){
arr.push(myObj[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
编辑 - 如果你想要你也可以保留你的对象的索引,但你必须检查它们是否是数字(并且你得到缺少索引的未定义值:
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]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Pil*_*ila 29
简单地做
Object.values(obj);
Run Code Online (Sandbox Code Playgroud)
就这样!
bjo*_*rnd 24
如果您知道对象中的最大索引,则可以执行以下操作:
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']]Run Code Online (Sandbox Code Playgroud)
Max*_*dow 19
由于ES5 Object.keys()返回一个包含直接在对象上定义的属性的数组(不包括在原型链中定义的属性):
Object.keys(yourObject).map(function(key){ return yourObject[key] });
Run Code Online (Sandbox Code Playgroud)
ES6通过箭头功能更进一步:
Object.keys(yourObject).map(key => yourObject[key]);
Run Code Online (Sandbox Code Playgroud)
小智 17
如今,有一种简单的方法:Object.values().
var myObj = {
1: [1, 2, 3],
2: [4, 5, 6]
};
console.log(Object.values(myObj));
Run Code Online (Sandbox Code Playgroud)
输出:
[[1, 2, 3], [4, 5, 6]]
Run Code Online (Sandbox Code Playgroud)
这不需要jQuery,它已在ECMAScript 2017中定义.
它受到每个现代浏览器的支持(忘记IE).
nob*_*ody 15
x = [];
for( var i in myObj ) {
x[i] = myObj[i];
}
Run Code Online (Sandbox Code Playgroud)
fri*_*der 15
最好的方法是使用javascript -only函数:
var myArr = Array.prototype.slice.call(myObj, 0);
Run Code Online (Sandbox Code Playgroud)
Adi*_*ngh 15
ECMASCRIPT 5:
Object.keys(myObj).map(function(x) { return myObj[x]; })
Run Code Online (Sandbox Code Playgroud)
ECMASCRIPT 2015或ES6:
Object.keys(myObj).map(x => myObj[x])
Run Code Online (Sandbox Code Playgroud)
解决方法非常简单
var my_obj = {1:[Array-Data], 2:[Array-Data]}
Object.keys(my_obj).map(function(property_name){
return my_obj[property_name];
});
Run Code Online (Sandbox Code Playgroud)
ES8的方法 变得简单:
const obj = { x: 'xxx', y: 1 };
let arr = Object.values(obj); // ['xxx', 1]
console.log(arr);Run Code Online (Sandbox Code Playgroud)