JavaScript:如何获取以特定字符串开头的对象的所有键和值?

Nei*_*eil 14 javascript

我试图获取以对象开头的所有键和值imageIds.

我的对象如下所示:

{
    title: 'fsdfsd',
    titleZh: 'fsdfsd',
    body: 'fsdf',
    bodyZh: 'sdfsdf',
    imageIds: '/uploads/tmp/image-3.png',
    imageIdsZh: '' 
}
Run Code Online (Sandbox Code Playgroud)

但我只需要属性imageIds,和imageIdsZh.但是明天,一个对象可能包含imageIdsBlah,我也需要把它拿起来.我可以从对象中删除前几个属性,但是下一个对象可能包含其他属性,例如foo: 'bar'

zer*_*kms 25

一些功能风格很棒:

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);
Run Code Online (Sandbox Code Playgroud)

演示:http://jsfiddle.net/ngX4m/

一些小的解释:

  1. 我们使用Array.prototype.filter()函数来过滤掉以`imageIds2开头的键
  2. 我们使用Array.prototype.reduce()将过滤键的数组转换为key-value对的对象.为此,我们使用{}(空对象)的初始值,填充它并从每个执行步骤返回.

UPD:

来自@GitaarLAB的公平更新:

Object.keys是ES5,但返回一个对象自己的属性(所以不需要obj.hasOwnProperty(key))

  • 你能解释一下它是如何工作的吗? (2认同)
  • 我想,这里不需要"减少". (2认同)
  • 好的,我会买那个解释.;-) (2认同)
  • @Blue Skies:这很好,因为我没有更好的;-)这对我来说更自然 (2认同)