从每个对象数组中获取最大值

新手上路,请多包涵

所以我有这样的数据:

 data = [
         [{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
         [{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
         [{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
       ]

我想在每个对象数组中获取最大值。所以结果应该是这样的:

 maxValues = [150, 83, 55]

现在我的代码是:

 let maxValues = []
let tmp;
let highest = Number.NEGATIVE_INFINITY;

data.map((eachArr, index) => {
  for(let i = eachArr.length -1; i >= 0; i--){
    tmp = eachArr[i].value;
    if(tmp > highest) highest = tmp;
  }
  maxValues.push(highest)
})

结果是

maxValues = [150, 150, 150]

我怎样才能做到这一点?

原文由 kay 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 287
2 个回答

您可以使用 传播语法 并采用映射的最大值 value

扩展语法 允许在需要多个参数(用于函数调用)或多个元素(用于数组文字)或多个变量(用于解构赋值)的地方扩展表达式。

 var data = [[{ a: "b", value: 12}, {a: "bb", value: 39 }, {a: "bb", value: 150 }], [{ a: "c", value: 15}, {a: "cc", value: 83 }, {a: "ccc", value: 12 }], [{ a: "d", value: 55}, {a: "dd", value: 9 }, {a: "dd", value: 1 }]],
    result = data.map(a => Math.max(...a.map(b => b.value)));

console.log(result);

原文由 Nina Scholz 发布,翻译遵循 CC BY-SA 3.0 许可协议

您必须包括 let highest = Number.NEGATIVE_INFINITY; highest array forEach 功能

 data = [
         [{a: "b", value: 12}, {a: "bb", value: 39}, {a: "bb", value: 150}],
         [{a: "c", value: 15}, {a: "cc", value: 83}, {a: "ccc", value: 12}],
         [{a: "d", value: 55}, {a: "dd", value: 9}, {a: "dd", value: 1}]
       ]
let maxValues = []
let tmp;
data.forEach((eachArr, index) => {
  let highest = Number.NEGATIVE_INFINITY;
  for(let i = eachArr.length -1; i >= 0; i--){
    tmp = eachArr[i].value;
    if(tmp > highest) highest = tmp;
  }
  maxValues.push(highest)
})
console.log(maxValues);

原文由 Mihai Alexandru-Ionut 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题