具有属性子集的对象数组克隆
Posted
技术标签:
【中文标题】具有属性子集的对象数组克隆【英文标题】:Object array clone with subset of properties 【发布时间】:2015-08-20 07:31:33 【问题描述】:在 javascript 中,将一组统一对象克隆为一个具有每个对象的属性子集的最有效方法是什么?
更新
这是最有效的方法还是有更好的方法? -
var source = [
id: 1,
name: 'one',
value: 12.34
,
id: 2,
name: 'two',
value: 17.05
];
// copy just 'id' and 'name', ignore 'value':
var dest = source.map(function (obj)
return
id: obj.id,
name: obj.name
;
);
【问题讨论】:
How to get a subset of a javascript object's properties 的可能重复项 @artm,这个问题是关于一个对象的,而我问的是一组对象。 @Khalid,这个问题不包括属性的子集。 好吧,例如,您可以使用***.com/a/17781590/3309109 并为数组中的每个对象调用它。 【参考方案1】:使用对象解构和属性简写
let array = [ a: 5, b: 6, c: 7 , a: 8, b: 9, c: 10 ];
let cloned = array.map(( a, c ) => ( a, c ));
console.log(cloned); // [ a: 5, c: 7 , a: 8, c: 10 ]
【讨论】:
【参考方案2】:首先定义一个克隆对象并返回属性子集的函数,
Object.prototype.pick = function (props)
return props.reduce((function (obj, property)
obj[property] = this[property];
return obj;
).bind(this), );
然后定义一个函数来克隆一个数组并返回每个对象的子集
function cloneArray (array, props)
return array.map(function (obj)
return obj.pick(props);
);
现在假设你有这个数组:
var array = [
name : 'khalid', city : 'ifrane', age : 99 ,
name : 'Ahmed', city : 'Meknes', age : 30
];
您需要调用该函数并传递您需要获取的属性数组作为结果
cloneArray(array, ['name', 'city']);
结果将是:
[
name : 'khalid', city : 'ifrane' ,
name : 'Ahmed', city : 'Meknes'
]
【讨论】:
这比我想要的答案更通用,即我不介意在复制操作期间指定列。您的答案更可重复使用和清洁。谢谢!【参考方案3】:就性能而言,这将是最有效的方法,是的。
【讨论】:
谢谢!我在第一个答案之后做了更新,它提供了一个非常好的和更通用的方法。以上是关于具有属性子集的对象数组克隆的主要内容,如果未能解决你的问题,请参考以下文章
如何将具有元素数组的每个对象的对象列表转换为具有子元素作为属性的对象数组