我有一个变量“ layerArr”,其中包含对象数组。每个都有自己的属性。
我希望遍历每个对象的'absoluteEndM'属性,以检查其值是否大于sctrLength的值,然后根据答案进行操作。我尝试了以下方法:
LayerArr[i].absoluteEndM.forEach(function (endMtr)
{
if (endMtr > sctrLength) {
maxWidth = endMtr;
}
else {
maxWidth = sctrLength;
}
})
和
for (var i = 0; i < LayerArr.length; i++) {
if (LayerArr[j].absoluteEndM > sctrLength) {
maxWidth = LayerArr[j].absoluteEndM;
}
else {
maxWidth = sctrLength;
}
}
都不起作用,我不确定为什么。正确的方法是什么?谢谢
编辑:layerArr包含以下对象:
layerArr [0],LayerArr [1],LayerArr [2]和LayerArr [3](它们只是编号,没有名称)
其中每个都有很多属性,例如:
layerArr[0].endDate
layerArr[0].cracked
layerArr[0].absoluteEndM
etc...
和:
layerArr[1].endDate
layerArr[1].cracked
layerArr[1].absoluteEndM
etc...
我不确定该如何解释
答案 0 :(得分:1)
const layerArr = [
{ absoluteEndM: 2 },
{ absoluteEndM: 4 },
{ absoluteEndM: 1 }
]
const sctrLength = 3;
let maxWidth = 0;
for (let layer of layerArr) {
maxWidth = layer.absoluteEndM > sctrLength ? layer.absoluteEndM : sctrLength
console.log(maxWidth)
}
该代码段应该可以工作(ES6,您可能需要将其转换为ES5或自己做一些工作)。
但是代码本身的功能有点奇怪,实际上您在maxWidth
中得到了一个不具有代表性的值。您可以创建一个像这样的数组:
const maxWidths = layerArr.map(layer => layer.absoluteEndM > sctrLength ? layer.absoluteEndM : sctrLength)
console.log(maxWidths)
一个示范:
const layerArr = [
{ absoluteEndM: 2 },
{ absoluteEndM: 4 },
{ absoluteEndM: 1 }
]
const sctrLength = 3;
let maxWidth = 0;
// Start of example 1 - just setting the maxWidth
for (let layer of layerArr) {
maxWidth = layer.absoluteEndM > sctrLength ? layer.absoluteEndM : sctrLength
console.log(maxWidth)
}
// End of example 1
// Start of example 2 - making an array of maxWidths
const maxWidths = layerArr.map(layer => layer.absoluteEndM > sctrLength ? layer.absoluteEndM : sctrLength)
console.log(maxWidths)
// End of example 2
答案 1 :(得分:0)
要准确地从问题中说出您需要什么有点棘手,但是看来您想要做的是从对象数组中确定absoluteEndM
的最大值,但还要包括该值sctrLength
中的。这可能是这样的:
const LayerArr = [
{
absoluteEndM: 2,
},
{
absoluteEndM: 4,
},
{
absoluteEndM: 1,
},
]
const sctrLength = 3
const maxWithDefault = defaultValue => items => Math.max(...[...items, defaultValue])
const maxIncludingSctrLength = maxWithDefault(sctrLength)
const path = k => x => x[k]
const getAbsoluteEndM = path('absoluteEndM')
const getMaxAbsoluteEndM = _layers =>
maxIncludingSctrLength(_layers.map(getAbsoluteEndM))
const result = getMaxAbsoluteEndM(LayerArr)
console.dir(result)