我有一个像
这样的对象数组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': 12 },
{'label': 'V12', 'value': 20 },
{'label': 'V13', 'value': 15 },
{'label': 'VE', 'value': 13 }
];
我需要按顺序生成新数组
[
{'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': 15 },
{'label': 'VE', 'value': 13 }
];
在这里,我必须找到具有最大值V的对象的查找值,并且所有其他对象应保持相同。
我正在做的是我正在使用 - .filter for< 10 || 'S' - 。找10 - .find over map获取最大值 - .find for'T'
似乎很复杂。有什么建议吗?
更新 以下是我尝试的fiddle。仍然必须在数组上执行find
,map
然后reduce
。有什么建议可以简化这个吗?
答案 0 :(得分:0)
您可以循环遍历数组并使用收集ten
对象的闭包来减少它。
var array = [{ 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: 12 }, { label: 'V12', value: 20 }, { label: 'VE', value: 13 }],
result = array.reduce(function (ten) {
return function (r, a) {
var n = +a.label.match(/\d+$/);
if (n >= 10) {
if (!ten) {
ten = { label: 'V10+', value: 0 };
r.push(ten);
}
ten.value = Math.max(ten.value, a.value);
} else {
r.push(a);
}
return r;
};
}(), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }