2013-03-11 32 views
-2

从这个问题你打算在:Getting first object from javascript litteral充分利用对象文本只值

是否可以从一组名字只得到值:值对?因此,可以说,我们有对象的列表,具有任意数量的值,每一个对象:

var items = [ 
    {name:"Foo", age:16, gender:"m"}, 
    {name:"Bar", age:17, gender:"f"}, 
    {name:"foo", age:16, gender:"m"}, 
    {name:"bar", age:18, gender:"m"}, 
    {name:"foobar", age:18, gender:"f"}, 
    {name:"barfoo", age:20, gender:"f"} 
]; 

我怎么能回到像一个列表:

var items = [ 
    ["Foo", 16, "m"], 
    ["Bar", 17, "f"], 
    ["foo", 16, "m"], 
    ["bar", 18, "m"], 
    ["foobar", 18, "f"], 
    ["barfoo", 20, "f"] 
]; 

我都试过,但不知道是否有一个更好的方式来做到这一点。

Array.prototype.getValues = function() { 
    if(typeof(this[0]) != typeof({})) 
     throw "Array values are expected to be == typeof({})"; 
    var items = []; 
    for (var i = 0; i < this.length; i++) { 
     var r = []; 
     for (var l in this[i]) { 
      r.push(this[i][l]); 
     } 
     items.push(r); 
    } 
    return items; 
}; 
+1

我要问你尝试过什么? – kapa 2013-03-11 00:57:03

+0

我不明白为什么这个投票结果如此之差 - 。 - – FabianCook 2013-03-11 01:05:17

+0

没有冒犯,但是在StackOverflow上,人们并没有真正为你编写代码,但是如果你被困住并且告诉你什么样的代码,你犯的错误。所以如果你问一个问题,你通常应该包括你所尝试过的。当你包含你的代码时,我删除了我的downvote。 – kapa 2013-03-11 01:09:48

回答

4
var newitems=[]; 
//loop through each item in the original 
for(var i =0; i<items.length; i++) 
{ 
    newitems[i] = []; 
    //loop over the properties in each element and push it to an array 
    for(var prop in items[i]){ 
    newitems.push(items[i][prop]); 
    } 
} 

或者:

var newitems = items.map(function(elem){ 
    var item = []; 
    for(var prop in elem){ 
    item.push(elem[prop]); 
    } 
    return item; 
}) 
+1

@SmartLemon'Array.prototype'绝对不是那个地方,因为这是一个非常具体的方法,并不适用于每个数组。 – bfavaretto 2013-03-11 01:24:03

+0

我在很多数组中使用它... – FabianCook 2013-03-11 01:33:56

+0

同意@bfavaretto,Array.prototype应该只适用于适用于所有数组的东西。 – 2013-03-11 01:36:14