javascript 对象过滤器 - 不返回关联键

javascript object filter - not returning associative keys

使用 underscorejs 我可以过滤对象中的数据,但它不会保留它的键。有什么办法可以用键取回对象

var data = {
  foo: 'fff',
  bar: 'sss',
  aaa: 'gggg'
}
console.info('returns array with keys:')

console.log(data)

var ret = _.filter(data, function(el, key) {
  if (key == 'foo' || el == 'sss') {
    return true
  }
})

console.info('keys are lost?')
console.log(ret)

这里是fiddle:https://jsfiddle.net/7L7tmq7s/

在没有过滤器的情况下解决了这个问题:

console.log(data)
var filtered = {};
var ret = _.each(data, function(el, key) {
  if ((key == 'foo' || el == 'sss')) {
    filtered[key] = el;
  }
})

console.info('keys are not lost?')
console.log(filtered)

工作代码here

像这样直接的东西怎么样(下划线在这里有点没用)?

'use strict';
function ReBuildArray(source, pick, plus) {
    var retVal = {};
    for(var pck in pick) { // without check will return pick'sKey:undefined
        if(source[pick[pck]]) retVal[pick[pck]] = source[pick[pck]];
    }
    for(var pls in plus) {
        retVal[pls] = plus[pls];
    }
    return retVal;
}

var data = {
  foo: 'fff',
  bar: 'sss',
  aaa: 'gggg'
}

var ret = ReBuildArray(data, ['foo','sss']);

console.info('filtered keys', ret); // {foo: "fff"}

var ret = ReBuildArray(data, ['foo','sss'], {'foo2':'bar'});
console.info('filtered keys + additional', ret); // {foo: "fff", foo2: "bar"}

ret = ReBuildArray(data, ['foo','sss'], {'foo':'bar'});
console.info('filtered, but then rewritten keys', ret) // {foo: "bar"}