如果我有像这样的对象数组
[
{
"name" : "some name",
"more data" : "data",
...
},
{
"name" : "another name",
"more data" : "data",
...
},
...
]
我想复制数组,但只复制对象中的name元素,以便我有这个:
[
{
"name" : "some name",
},
{
"name" : "another name",
},
...
]
如果没有编写循环,是否有一种简便的方法可以做到这一点?
答案 0 :(得分:3)
不,你必须用循环来做这件事,但仍然可以做空:
for(var i = 0; i < arr.length; i++)
arr[i] = {name: arr[i].name};
如果您使用任何类型的框架或库,那么它将隐藏您的循环。它仍将遍历所有内容。
答案 1 :(得分:0)
不,没有循环就无法做到这一点。我能否建议您使用一些原型制作魔法来做到这一点。 (注意,这可以通过一些map
或forEach
魔法来完成,它只是隐藏了你正在循环的事实。我会留下这个循环来说明这个想法)
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
元素。