对象到数组(数组的数组)
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
【讨论】:
以上是关于对象到数组(数组的数组)的主要内容,如果未能解决你的问题,请参考以下文章
在javascript中将对象数组复制到另一个数组而没有对象引用(深拷贝)