코드의 목표는 10 이상의 숫자 구성 요소가있는 모든 레이블을 레이블이있는 단일 객체로 결합하는 새 배열을 생성하는 것입니다 V10+
. 새 개체 값은 가장 큰 레이블의 값이됩니다.
다음 예에서는 V13
가장 큰 레이블이므로 해당 값이 사용됩니다.
[{'V10', 11}, {'V11', 123}, {'V12', 112}, {'V13', 120}] => {'V10+', 120}
현재 내가 사용해야 find
, map
다음 reduce
배열에. 누구든지 이것을 단순화하는 제안이 있습니까?
var someObjects = [
{'label': 'VS', 'value': 1 },
{'label': 'V1', 'value': 2 },
{'label': 'V2', 'value': 3 },
{'label': 'V3', 'value': 4 },
{'label': 'V4', 'value': 5 },
{'label': 'V5', 'value': 6 },
{'label': 'V6', 'value': 7 },
{'label': 'V7', 'value': 8 },
{'label': 'V8', 'value': 9 },
{'label': 'V9', 'value': 10 },
{'label': 'V10', 'value': 11 },
{'label': 'V11', 'value': 123 },
{'label': 'V12', 'value': 112 },
{'label': 'V13', 'value': 120 },
{'label': 'VE', 'value': 13 }
];
var maxObjVal = someObjects.find(function(obj) {
var max = Math.max.apply(null, someObjects.map(function (s) {
var labelNumber = s.label.substring(1);
return +labelNumber || 0;
}));
return obj.label == 'V' + max;
}).value;
var result = someObjects.reduce(function (ten) {
return function (r, a) {
var n = +a.label.substring(1);
if (n >= 10) {
if (!ten) {
ten = { label: 'V10+', value: maxObjVal };
r.push(ten);
}
} else {
r.push(a);
}
return r;
};
}(), []);
console.log('result: ' + JSON.stringify(result));
배열을 통해 단일 반복으로 벗어날 수 있습니다. someObjects 정의 후에 이것을 시도하십시오.
var resultArray = [];
var tenObj = null;
var maxVal;
someObjects.forEach(function (s) {
// Get the number from the label (if possible)
var labelNumber = s.label.substring(1);
labelNumber = +labelNumber || 0;
// Update the maxVal
maxVal = maxVal ? Math.max(maxVal, s.value) : s.value;
// Check for a label number >= 10
if (labelNumber >= 10) {
if (!tenObj) {
tenObj = { label: 'V10+', value: 0}; // We'll set this value later
resultArray.push(tenObj);
}
} else {
resultArray.push(s);
}
}));
// Update the value of the tenObj
if (tenObj) {
tenObj.value = maxVal;
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다