0

我正在寻找从 javascript 对象中提取元素子集的最有效方法。假设我有很多 javascript 对象形式的记录

var records = [
  { foo: 123, bar: 456, baz: 789, boo: [1,2,3] },
  { foo: 345, bar: 754, baz: 853, boo: [4,3,2] },
  { foo: 321, bar: 234, baz: 443, boo: [5,2,1] }
]

对于这些对象中的每一个我想提取相同的键,它们存储在一个数组中,例如

var keys = ["bar", "boo"]

这样做的本机方式是

out = [];
for(var i = 0; i < records.length; i++){
  out[i] = {};
  for(var j = 0; j < keys.length; j++){
    var field = keys[j];    
    out[i][field] = records[i][field]
  }
}
console.log(out)

有更快/更优雅的方式吗?

4

2 回答 2

0

对于您的问题,我想不出更好的 Big O 表示法,但是查看当前数据,一个好的算法可能不是您的主要关注点?

在 ECMA 脚本 5 中,基础对象包含一个 keys 方法:

a = {a: '1', b: '2', c: '3'}
Object.keys(a)
// [ 'a', 'b', 'c' ]
于 2013-02-06T08:19:13.013 回答
0

不确定速度,但更简洁的表示法可能是(假设所有键都存在于每条记录中):

var out = records.map(function(v) {
  return keys.reduce(function(o, k) {
    return (o[k] = v[k], o);
  }, {});
});
于 2013-02-07T06:05:38.280 回答