我的js对象:
data_obj = {'p1': 1, 'p2':2, 'p3':3}
我的数组
data_array = ['p1', 'p3']
现在,我想根据数组过滤对象。预期结果是
fil_obj = {'p1': 1, 'p3':3}
现在,找到具有最大值的密钥。预期结果是
p3
由于我有数以千计的物品,我期待一个非常有效的解决方案。 由于我在这个项目中使用d3js,基于像d3.max这样的d3js的解决方案会很棒。
答案 0 :(得分:2)
您可以迭代所需属性并返回最大密钥。
var data_obj = { p1: 1, p2: 2, p3: 3},
data_array = ['p1', 'p3'],
result = data_array.reduce(function (r, a, i) {
return !i || data_obj[r] < data_obj[a] ? a : r;
}, undefined);
console.log(result);
&#13;
答案 1 :(得分:1)
我从未使用过d3,但在我看来,只需拨打一次.reduce()
,就可以非常有效地获得结果:
var data_obj = {'p1': 1, 'p2':2, 'p3':3};
var data_array = ['p1', 'p3'];
var results = data_array.reduce((r,v)=>{
if (v in data_obj) {
r.data[v] = data_obj[v];
if (data_obj[v] > r.maxVal) {
r.maxKey = v;
r.maxVal = data_obj[v];
}
}
return r;
}, {data:{}, maxKey:null, maxVal:Number.NEGATIVE_INFINITY});
console.log(results);
&#13;