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'`