这是我的代码:
var asset = ['1234_12', '1234_34', '1234_33', '4321_22', '4321_90'];
var largest = removeElements(asset);
function removeElements(asset) {
var retVal = [];
for (i = 0; i < asset.length; i++) {
for (var j = 0; j < asset.length; j++) {
if (asset[i].split('_')[0] == asset[j].split('_')[0]) {
if (asset[i].split('_')[1].split('.')[0] > asset[j].split('_')[1].split('.')[0]) {
retVal = removeElements(asset, asset[j]);
for (var k = 0; k < retVal.length; k++) {
for (var l = 0; l < retVal.length; l++) {
if (retVal[k].split('_')[0] == retVal[l].split('_')[0]) {
removeElements(retVal);
} else {
return retVal;
}
}
}
}
}
}
}
return retVal;
}
这是数组的结构:
var asset = ['1234_12', '1234_34', '1234_33', '4321_22', '4321_90'];
我想要的是在 '1234'
或 '4321'
系列中获得最大的值。例如,在本例中,我需要抓取 '1234_34'
和 '4321_90'
。
RangeError: Maximum call stack size exceeded
我做错了什么?
最佳答案
你让事情变得比你自己更难。您可以迭代每个项目并将匹配的值存储在对象中:
var asset = ['1234_12', '1234_34', '1234_33', '4321_22', '4321_90'];
var intermediate = {};
asset.forEach(function(v) {
var parts = v.split('_');
var key = parts[0];
var val = parts[1];
if (!intermediate[key] || intermediate[key] < val) {
intermediate[key] = val;
}
});
这将产生一个像这样的对象:
{"1234": "34", "4321": "90"}
然后可以将其转换为预期的数组:
var output = Object.keys(intermediate).map(function(key) {
return key + '_' + intermediate[key];
});
console.log(output); // ["1234_34", "4321_90"]
看看.forEach
, .map
和 Object.keys
关于javascript - 递归: How can I remove,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37624873/