这是我的意见:
其中输入可能会收到更多数据,例如'e:5'
var input = {a:2,b:3,c:2,d:1};
我想将此输入转换为以下输出:
var output = [{name="a",id="2"},
{name="b",id="3"},
{name="c",id="2"},
{name="d",id="1"}];
提前感谢。
答案 0 :(得分:2)
使用Array#map
而不是Object.keys
Object.keys()
方法返回给定对象自己的可枚举属性的数组。
map()
方法创建一个新数组,其结果是在此数组中的每个元素上调用提供的函数。
var input = {
a: 2,
b: 3,
c: 2,
d: 1
};
var mapped = Object.keys(input).map(function(key) {
return {
name: key,
id: input[key]
};
});
console.log(mapped);

答案 1 :(得分:0)
var input = {a:2,b:3,c:2,d:1};
var output = [];
Object.keys(input).forEach(function(key){
output.push({name:key,id:input[key]});
})
console.log(output);

答案 2 :(得分:0)
Javascript对象属性是无序的。因此,从Object.keys
返回的键的顺序未确定。为了保持字母顺序,例如您需要先键入sort
,然后使用map
创建一个具有预期值的新数组。
我不喜欢ES5。所以这是我的ES6答案。
Object.keys(input).sort((a, b) => a.localeCompare(b)).map(name => ({name, id: input[name]}));
答案 3 :(得分:0)
为了一些乐趣和培训目的,我们可能会想出这个。请记住,虽然以后可以添加,但是在实例化时,您始终可以通过构造函数嵌入Symbol.iterator方法,并且默认情况下您的对象可以迭代。
var input = {a:2,b:3,c:2,d:1},
output = [];
input[Symbol.iterator] = function*(){
var ok = Object.keys(this),
i = 0;
while (i < ok.length) yield {[ok[i]]: this[ok[i++]]};
};
for (var keyValuePair of input) output.push(keyValuePair);
console.log(output);
// or you can even do like
output.length = 0;
output = [...input]; // cool
console.log(output);
答案 4 :(得分:0)
您也可以尝试以下方法:
var input = {a:2,b:3,c:2,d:1};
var output = Object.keys(input).reduce(function(p, c){
return p.concat({name:c, id:input[c]});
}, []);