我试图获取以imageIds开头的对象的所有键和值.
我的对象显示如下:
{ title: 'fsdfsd',titleZh: 'fsdfsd',body: 'fsdf',bodyZh: 'sdfsdf',imageIds: '/uploads/tmp/image-3.png',imageIdsZh: '' }
但我只需要属性imageIds和imageIdsZh.然而明天,一个对象可能包含imageIdsBlah,我也需要拿起它.我可以从对象中删除前几个属性,但是下一个对象可能包含其他属性,如foo:’bar’
解决方法
一些功能性的风格awesomeness:
var data = { title: 'fsdfsd',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);
一些小的解释:
>我们使用Array.prototype.filter()函数过滤出以`imageIds2开头的键
>我们使用Array.prototype.reduce()将过滤的键数组转换为键值对的对象.为此,我们使用{}(一个空对象)的初始值,填充它并从每个执行步骤返回.
UPD:
从@GitaarLAB公平更新:
Object.keys
is ES5,but returns an objects own properties (so no need forobj.hasOwnProperty(key)
)