我整晚都在为此工作,我知道答案很接近;但是我还有很多语法工作要做。请不要低估这一点 - 这样做只会阻止像我这样的新手提问。 我需要创建一个接受简单对象作为参数的函数,并返回一个数组数组。函数应该对具有任意数量的属性列的对象起作用,并且具有简单的字符串/数字值。我将在下面的代码中展示和解释我的工作:
//my first code:
var hi = {a: 1, b: 2, c: 3};
var props = new Array([],[],[]);
var lent = 0;
function newWave(hi){
for(var key in hi){
props[lent].push(key);
props[lent].push(hi[key]);
lent = lent + 1;
}
return props;
}
newWave(hi);
//function yields: [ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
//The return output is correct, but I need a universal code;
//looking at the number of columns in variable 'props', you can
//tell that this function only works on objects with 3 roperties.

//My second code:
function newWave(hi) {
var props = [];
var outcome = [];
for (var i = 0; i<1; i++){
for(var key in hi){
props.push(key, hi[key]);
outcome.push(props);
}
return outcome;
}
}
newWave(hi);
//This returns:
//[ [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ],
// [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ],
// [ 'a', 1 ], [ 'b', 2 ], [ 'c', 3 ] ]
//I feel like the answer is so close, but it's been 7 hours working on this,
//your help is greatly appreciated
&#13;
答案 0 :(得分:1)
function newWave (hi) {
return Object.keys(hi).map(v => [v, hi[v]]);
}
所以在这里我们使用Object.keys来获取对象属性的数组,然后对于每个我们将它们映射到数组,其中将属性作为第一项并将其值作为第二项
答案 1 :(得分:1)
您之前不必定义数组,您可以在函数中创建新的空数组,循环传递对象并推送[key, value]
var hi = {a: 1, b: 2, c: 3};
function newWave(obj) {
var r = []
for (var key in obj) r.push([key, obj[key]])
return r;
}
console.log(JSON.stringify(newWave(hi)))
还有一个名为Object.entries()的新js方法可以返回此结果。
var hi = {a: 1, b: 2, c: 3};
function newWave(obj) {
return Object.entries(obj)
}
console.log(newWave(hi))
答案 2 :(得分:0)
使用Object.keys
获取数组中Object中的所有键。循环遍历该数组并将键和值推送到另一个数组
var hi = {
a: 1,
b: 2,
c: 3,
d: 4
};
var finalArray = []
function newWave(hi) {
var getKeys = Object.keys(hi);
for (var i = 0; i < getKeys.length; i++) {
var tempArray = [];
tempArray.push(getKeys[i].toString(), hi[getKeys[i]])
finalArray.push(tempArray)
}
return finalArray;
}
console.log(newWave(hi));
&#13;