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

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)

  • @KarelBílek是否保证了JS对象的迭代顺序?['对象是Object类型的成员.它是一个无序的属性集合,每个属性都包含一个原始值,对象或函数.'](http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%第203%20edition,%20December%201999.pdf) (10认同)
  • Lodash文档虽然说"不能保证迭代顺序" (3认同)
  • 对顶部答案不满意,我只是写了这个几乎完全正确的功能,回来发布它作为答案,向下滚动,看到170.意识到,男人如果我没有放弃我就不会想到:)这应该在顶部.OP请选择答案. (3认同)

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)

  • 您也可以在没有jQuery的情况下执行此操作:Object.keys(myObject).map(function(val){return [val]}); (54认同)
  • D'哦!忽略我的评论.我没有注意到这个问题上的jQuery标签. (21认同)
  • @Dogbert,请你能解释一下`$ .map`吗?我尝试对此进行的每次搜索都会显示许多指向jQuery或数组映射方法的链接. (8认同)
  • 有没有办法维护新阵列中的键?www上的每个答案我都看不到密钥的转换. (8认同)
  • @TD_Nijboer是的,使用`value.key = index; return [value];`而不是`return [value];` (3认同)

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)

就这样!

  • Object.values是Safari,IE,Node 6不支持的ES2017方法. (11认同)

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)

  • 你应该使用push,否则你最终可能会创建一个对象 (10认同)

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)


San*_*gha 13

怎么样 jQuery.makeArray(obj)

这就是我在我的应用程序中做到的方式.

  • 这将返回上面示例的[Object]. (2认同)

Iva*_*tes 6

解决方法非常简单

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)


Bla*_*mba 5

ES8的方法 变得简单

官方文件

    const obj = { x: 'xxx', y: 1 };
    let arr = Object.values(obj); // ['xxx', 1]
    console.log(arr);
Run Code Online (Sandbox Code Playgroud)