对象到数组(数组的数组)

Posted

技术标签:

【中文标题】对象到数组(数组的数组)【英文标题】:Object to Array (an array of arrays) 【发布时间】:2017-05-25 14:54:51 【问题描述】:

我正在尝试使用函数将对象文字转换为数组数组。

使用我拥有的两个示例对象,我正在寻找的最终结果是:

[ ["ugh","grr"] , ["foo", "bar"] , ["blah" , 138] ] 来自obj1

[ "shambala","walawala"] , ["foofighter","Barstool"] , ["blahblah",1382342453] ] 来自obj2

var obj1 = 
  ugh: "grr",
  foo: "Bar",
  blah: 138
; 

var obj2 = 
  shambala: "walawala",
  foofighter: "Barstool",
  blahblah: 1382342453
;

var piece1 = Object.keys(obj1);

var piece2 = Object.values(obj1);

var result = [ ];

for (var i = 0; i < piece1.length; i++) 
 result.push([piece1[i] , piece2[i]])
 

console.log(result)

根据我上面的内容,我已经能够实现:

[ ["ugh","grr"] , ["foo", "bar"] , ["blah" , 138] ] 来自obj1

但我对如何通过函数实现相同的输出感到困惑。

这似乎是一件简单的事情。

function objToArray(objectLiteral) 

var piece1 = Object.keys(objectLiteral);

var piece2 = Object.values(objectLiteral);

var result = [ ];

for (var i = 0; i < piece1.length; i++) 
 return result.push([piece1[i] , piece2[i]])
  
  

console.log(objToArray(obj1))

这是我能做到的最好的,但我一直得到 1,我不知道为什么。 其他尝试我只是以 undefined 告终。

【问题讨论】:

Array#push 在您向其推送元素后返回数组的新长度。 【参考方案1】:

您的代码的问题是您比需要更早地使用了return,请参阅此工作代码:

var obj1 = 
  ugh: "grr",
  foo: "Bar",
  blah: 138
;

var obj2 = 
  shambala: "walawala",
  foofighter: "Barstool",
  blahblah: 1382342453
;

function objToArray(objectLiteral) 
  var piece1 = Object.keys(objectLiteral);
  var piece2 = Object.values(objectLiteral);
  var result = [];
  for (var i = 0; i < piece1.length; i++) 
    result.push([piece1[i], piece2[i]])
  
  return result;


console.log(objToArray(obj1));

【讨论】:

感谢所有评论/阅读/贡献任何内容的人。我真的很感激。 塔尔,你一针见血。这是错误的回报。【参考方案2】:

如果你的环境支持它,你可以使用Object.entries:

var obj1 = 
  ugh: "grr",
  foo: "Bar",
  blah: 138
;

var pairs = Object.entries(obj1);

或者,您可以像这样编写entries 函数:

function entries(object) 
  const pairs = [];
  for(let key in object) 
    if(object.hasOwnProperty(key)) 
      pairs.push([key, object[key]]);
    
  
  return pairs;

【讨论】:

【参考方案3】:

这是我的实现方式。

function objectToArray(obj) 
    return Object.keys(obj).map(function(prop) 
        return [prop, obj[prop]];
    );


// ES2015
function objectToArray (obj) 
    return Object.keys(obj).map(prop => [prop, obj[prop]]);

View demo

【讨论】:

以上是关于对象到数组(数组的数组)的主要内容,如果未能解决你的问题,请参考以下文章

React中将对象从数组移动到数组到另一个对象时的位置镜像

如何将对象添加到数组

转换:数组到对象,对象到数组

在javascript中将对象数组复制到另一个数组而没有对象引用(深拷贝)

检查对象值是不是存在于 Javascript 对象数组中,如果不存在则将新对象添加到数组

$emit 对象到父组件,并推送到数组。数组中的对象仍然是反应性的,为啥?