这是当前代码和较大数组的一部分:
function Initialize() {
ARR[127][1][0] = {name:"Gl", ss:["Z0",127,"B0",1,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}};
ARR[127][127][0] = {name:"Gl Co", ss:["Z0",127,"B0",127,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}};
ARR[127][1][6] = {name:"Gl El", ss:["Z0",127,"B0",1,[58,6]], delay:{first:60, term:310, slow:360, med:245, fast:145}};
ARR[127][127][6] = {name:"Gl El Co", ss:["Z0",127,"B0",127,[58,6]], delay:{first:60, term:310, slow:330, med:245, fast:145}}
}
var ARR = new Array(128);
for (let val1 = 0; val1 < ARR.length; val1++) {
ARR[val1] = new Array(128);
for (let val2 = 0; val2 < ARR[val1].length; val2++) {
ARR[val1][val2] = new Array(128);
for (let val3 = 0; val3 < ARR[val1][val2].length; val3++) {
ARR[val1][val2][val3] = [];
}
}
}
Initialize();
var maxValue = 0;
for (let i = 0; i < ARR.length; i++) {
for (let j = 0; j < ARR[i].length; j++) {
for (let k = 0; k < ARR[i][j].length; k++) {
for (let l = 0; l < ARR[i][j][k].length; l++) {
maxValue = Math.max(...Object.values(ARR[i][j][k].delay))
}
}
}
}
console.log(maxValue);
我正在寻找
.delay
对象中的最大值 - 从所有行中。在本例中为 360。
我看过不同的方法,但它们似乎都是针对具有相同对象的对象数组,但
.delay
中的每个对象都有不同的名称。
正如同事在评论中正确提到的那样,您需要利用三件事:
InitializeMap函数:
创建一个以
key
作为坐标字符串和相应值的变换集。
function InitializeMap() {
const entries = [
{ x: 127, y: 1, z: 0, data: {name:"Gl", ss:["Z0",127,"B0",1,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}}},
{ x: 127, y: 127, z: 0, data: {name:"Gl Co", ss:["Z0",127,"B0",127,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}}},
{ x: 127, y: 1, z: 6, data: {name:"Gl El", ss:["Z0",127,"B0",1,[58,6]], delay:{first:60, term:310, slow:360, med:245, fast:145}}},
{ x: 127, y: 127, z: 6, data: {name:"Gl El Co", ss:["Z0",127,"B0",127,[58,6]], delay:{first:60, term:310, slow:330, med:245, fast:145}}}
];
entries.forEach(entry => {
const key = `${entry.x},${entry.y},${entry.z}`;
ARR_Map.set(key, entry.data.delay); // Store only delay objects
});
}
搜索最大值
迭代变换后的映射并搜索每组中的最大值。然后找出最大的值。
// Function to find the maximum delay using Map
function findMaxDelayUsingMap(arrMap) {
let maxDelay = -Infinity;
for (let delayObj of arrMap.values()) {
const localMax = Math.max(...Object.values(delayObj).filter(val => typeof val === 'number'));
if (localMax > maxDelay) {
maxDelay = localMax;
}
}
return maxDelay;
}
完整代码示例:
// Initialize a Map to store only initialized entries
const ARR_Map = new Map();
// Modified Initialize function to use Map
function InitializeMap() {
const entries = [
{ x: 127, y: 1, z: 0, data: {name:"Gl", ss:["Z0",127,"B0",1,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}}},
{ x: 127, y: 127, z: 0, data: {name:"Gl Co", ss:["Z0",127,"B0",127,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}}},
{ x: 127, y: 1, z: 6, data: {name:"Gl El", ss:["Z0",127,"B0",1,[58,6]], delay:{first:60, term:310, slow:360, med:245, fast:145}}},
{ x: 127, y: 127, z: 6, data: {name:"Gl El Co", ss:["Z0",127,"B0",127,[58,6]], delay:{first:60, term:310, slow:330, med:245, fast:145}}}
];
entries.forEach(entry => {
const key = `${entry.x},${entry.y},${entry.z}`;
ARR_Map.set(key, entry.data.delay); // Store only delay objects
});
}
InitializeMap();
// Function to find the maximum delay using Map
function findMaxDelayUsingMap(arrMap) {
let maxDelay = -Infinity;
for (let delayObj of arrMap.values()) {
const localMax = Math.max(...Object.values(delayObj).filter(val => typeof val === 'number'));
if (localMax > maxDelay) {
maxDelay = localMax;
}
}
return maxDelay;
}
let maximumDelayMap = findMaxDelayUsingMap(ARR_Map);
console.log("The maximum delay using Map is:", maximumDelayMap);
maxValue
与当前 .delay
对象的最大值进行比较。.delay
属性。(for let l ...)
。你从来没有使用过l
。function Initialize() {
ARR[127][1][0] = {name:"Gl", ss:["Z0",127,"B0",1,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}};
ARR[127][127][0] = {name:"Gl Co", ss:["Z0",127,"B0",127,[58,0]], delay:{first:60, term:220, slow:240, med:188, fast:188}};
ARR[127][1][6] = {name:"Gl El", ss:["Z0",127,"B0",1,[58,6]], delay:{first:60, term:310, slow:360, med:245, fast:145}};
ARR[127][127][6] = {name:"Gl El Co", ss:["Z0",127,"B0",127,[58,6]], delay:{first:60, term:310, slow:330, med:245, fast:145}}
}
var ARR = new Array(128);
for (let val1 = 0; val1 < ARR.length; val1++) {
ARR[val1] = new Array(128);
for (let val2 = 0; val2 < ARR[val1].length; val2++) {
ARR[val1][val2] = new Array(128);
for (let val3 = 0; val3 < ARR[val1][val2].length; val3++) {
ARR[val1][val2][val3] = {};
}
}
}
Initialize();
var maxValue = 0;
for (let i = 0; i < ARR.length; i++) {
for (let j = 0; j < ARR[i].length; j++) {
for (let k = 0; k < ARR[i][j].length; k++) {
if (ARR[i][j][k].delay) {
maxValue = Math.max(maxValue, ...Object.values(ARR[i][j][k].delay));
}
}
}
}
console.log(maxValue);