JavaScript: How can I get all the keys and values of an object that begin with a specific string?

javascript

Solution

Some functional style awesomeness:

var data = {
    title: 'fsdfsd',
    titleZh: 'fsdfsd',
    body: 'fsdf',
    bodyZh: 'sdfsdf',
    imageIds: '/uploads/tmp/image-3.png',
    imageIdsZh: '' 
};

var z = Object.keys(data).filter(function(k) {
    return k.indexOf('imageIds') == 0;
}).reduce(function(newData, k) {
    newData[k] = data[k];
    return newData;
}, {});

console.log(z);

Demo: http://jsfiddle.net/ngX4m/

Some minor explanation:

- We use `Array.prototype.filter()` function to filter out the keys that start with `imageIds2

- We use `Array.prototype.reduce()` to convert an array of filtered keys into an object of `key-value` pairs. For that we use the initial value of `{}` (an empty object), fill it and return from every execution step.

UPD:

A fair update from @GitaarLAB:

`Object.keys` is ES5, but returns an objects own properties (so no need for `obj.hasOwnProperty(key)`)

Problem

I am trying to get all the keys and values of an object that begin with `imageIds`. My object appears as the following: ``` { title: 'fsdfsd', titleZh: 'fsdfsd', body: 'fsdf', bodyZh: 'sdfsdf', imageIds: '/uploads/tmp/image-3.png', imageIdsZh: '' } ``` but I only need the properties `imageIds`, and `imageIdsZh`. However tomorrow, a object might contain `imageIdsBlah` and I would need to pick it up as well. I could remove the first few properties from the object, but then the next object might contain additional properties such as `foo: 'bar'`

Original source

Related problems