【问题标题】:How to filter complex array whose one property value is the same and the other property value is mas? [duplicate]如何过滤一个属性值相同而另一个属性值为mas的复杂数组? [复制]
【发布时间】:2021-05-10 06:48:59
【问题描述】:

作为标题,目的是获取没有重复名称的数组,值为最大值。

var data=[{name:'A',value:3},{name:'B',value:5},{name:'A',value:7},{name:'B',value:1},{name:'B',value:12},{name:'A',value:4}];

预期输出:

var newData=[];
newData=[{name:'A',value:7},{name:'B',value:12}];

提前致谢

【问题讨论】:

    标签: javascript arrays json object filter


    【解决方案1】:

    1.使用forEach、Math.max的解决方案

    var data = [
      { name: "A", value: 3 },
      { name: "B", value: 5 },
      { name: "A", value: 7 },
      { name: "B", value: 1 },
      { name: "B", value: 12 },
      { name: "A", value: 4 },
    ];
    
    const dict = {};
    data.forEach(({ name, value }) => {
      dict[name] = Math.max(value, dict[name] ?? Number.MIN_VALUE);
    });
    
    const result = Object.entries(dict).map((o) => {
      const [name, value] = o;
      return { name, value };
    });
    
    console.log(result);

    2。使用简单的 forEach 和 if 条件。

    var data = [{
        name: "A",
        value: 3
      },
      {
        name: "B",
        value: 5
      },
      {
        name: "A",
        value: 7
      },
      {
        name: "B",
        value: 1
      },
      {
        name: "B",
        value: 12
      },
      {
        name: "A",
        value: 4
      },
    ];
    
    const dict = {};
    data.forEach(({ name, value }) => {
      if (dict[name]) {
        if (dict[name] < value) dict[name] = value;
      } else {
        dict[name] = value;
      }
    });
    
    const result = Object.entries(dict).map((o) => {
      const [name, value] = o;
      return { name, value };
    });
    
    console.log(result);

    【讨论】:

      猜你喜欢
      • 2015-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多