Javascript:根据数组筛选键后,在对象中找到一个值最大的键

Javascript: Find a key with maximum value in a object after filtering keys based on an array

本文关键字:一个 数组 筛选 对象 Javascript      更新时间:2023-09-26

我的js对象:

data_obj = {'p1': 1, 'p2':2, 'p3':3}

我的数组

data_array = ['p1', 'p3']

现在,我要根据数组筛选对象。预期结果

fil_obj = {'p1': 1, 'p3':3}

现在,找到具有最大值的键。预期结果

p3

由于我有一个包含数千项的对象,我期望一个非常有效的解决方案。因为我使用d3js为这个项目,解决方案基于d3js像d3。麦克斯会很好。

您可以迭代所需的属性并返回最大键。

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);

我从未使用过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);