vitaly-t vitaly-t - 3 months ago 10
Javascript Question

Object array clone with subset of properties

What is the most efficient way in JavaScript to clone an array of uniform objects into one with a subset of properties for each object?

UPDATE

Would this be the most efficient way to do it or is there a better way? -

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
};
});

Answer

First define a function that clone an object and return a subset of properties,

Object.prototype.pick = function (props) {
   return  props.reduce((function (obj, property) {
        obj[property] = this[property];
        return obj;
   }).bind(this), {});
}

Then define a function that clone an array and return the subsets of each object

function  cloneArray (array, props) { 
    return array.map(function (obj) { 
       return obj.pick(props);
    });
}

Now let's say you have this array :

var array = [
   { name : 'khalid', city : 'ifrane', age : 99 },
   { name : 'Ahmed', city : 'Meknes', age : 30 }
];

you need to call the function and pass the array of properties you need to get as result

cloneArray(array, ['name', 'city']);

The result will be :

[
   { name : 'khalid', city : 'ifrane' },
   { name : 'Ahmed', city : 'Meknes' }
]
Comments