提取数组中许多对象的一部分

时间:2011-08-26 10:24:43

标签: javascript

如果我有像这样的对象数组

[
    {
        "name" : "some name",
        "more data" : "data",
        ...
    },
    {
        "name" : "another name",
        "more data" : "data",
        ...
    },
    ...
]

我想复制数组,但只复制对象中的name元素,以便我有这个:

[
    {
        "name" : "some name",
    },
    {
        "name" : "another name",
    },
    ...
]

如果没有编写循环,是否有一种简便的方法可以做到这一点?

2 个答案:

答案 0 :(得分:3)

不,你必须用循环来做这件事,但仍然可以做空:

for(var i = 0; i < arr.length; i++)
    arr[i] = {name: arr[i].name};

如果您使用任何类型的框架或库,那么它将隐藏您的循环。它仍将遍历所有内容。

Example

答案 1 :(得分:0)

不,没有循环就无法做到这一点。我能否建议您使用一些原型制作魔法来做到这一点。 (注意,这可以通过一些mapforEach魔法来完成,它只是隐藏了你正在循环的事实。我会留下这个循环来说明这个想法)

Array.prototype.clone = function(predicate)
{
   var newArray = [];
   for(var i = 0;i <this.length; i++){
       var newElement = {};
       for(x in this[i]){
           if(predicate(x)){
              newElement[x] = this[i][x];
          }
       }
      newArray.push(newElement);
   }
    return newArray;
}

这允许您克隆一个数组,传入一个函数来决定从数组中的每个元素保留哪个属性。所以给出一个像:

这样的数组
var arr = [
    {
        "name" : "some name",
        "more data" : "data"
    },
    {
        "name" : "another name",
        "more data" : "data"
    }
];

你可以做到

var newArray = arr.clone(function(x){ return x == "name";});

这将返回一个具有相同数量对象的数组,但每个对象只有name元素。

实例:http://jsfiddle.net/8BGmG/