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

Dan*_*Dan 2 javascript arrays

所以我有这样的数据:

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}]
       ]
Run Code Online (Sandbox Code Playgroud)

我希望在每个对象数组中获得最大值.所以结果应该是这样的:

maxValues = [150, 83, 55]
Run Code Online (Sandbox Code Playgroud)

现在我的代码是:

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)
})
Run Code Online (Sandbox Code Playgroud)

结果是

maxValues = [150, 150, 150]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Nin*_*olz 18

您可以使用扩展语法并采用映射的最大值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);
Run Code Online (Sandbox Code Playgroud)

  • 我知道你最近发布了这个,但是你可以花点时间来解释代码的作用以及它是如何工作的吗?这样,希望它对未来的访客更有用.顺便说一句,精美的书写!:) (4认同)

Mih*_*nut 7

你必须包含let highest = Number.NEGATIVE_INFINITY;内部forEach函数,因为你必须highest从你的每一组中进行设置array.

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);
Run Code Online (Sandbox Code Playgroud)