我试图通过使用函数将对象文字转换为数组数组。
使用我拥有的两个样本对象,我正在寻找的最终结果是:
来自[ ["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,我不知道为什么。 其他尝试我最终都未定义。
答案 0 :(得分:4)
您的代码存在的问题是您提前使用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));
答案 1 :(得分: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;
}
答案 2 :(得分:0)
以下是我如何实施它。
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]]);
}