Javascript 递归:如何删除

Javascript 递归:如何删除,javascript,loops,Javascript,Loops,这是我的密码: 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

这是我的密码:

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;
}
我想要的是在
'1234'
'4321'
系列中获得最大值。例如,在本例中,我需要抓取
'1234\u 34'
'4321\u 90'

RangeError:超出了最大调用堆栈大小


我做错了什么?

下面是一个可以抓住这些值的示例(请参阅):

它使用方便,但没有它的原则是相同的


首先,将每个字符串拆分为前缀和后缀的键值对(因此
1234_12
1234_34
等,变得像
{1234:['12',34']}
)。然后,您只需在该数组中找到最大值,并使用其键将其连接回来。

您正在使其变得比您自己更困难。您只需迭代每个项目并将匹配的值存储在对象中:

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;
  }
});
然后可以将其转换为预期阵列:

var output = Object.keys(intermediate).map(function(key) {
  return key + '_' + intermediate[key];
});
console.log(output); // ["1234_34", "4321_90"]

看看,这是真的吗?是的。更新了代码。对于每个“数字类别”(1234),我将使用一个映射将所有数组项转换为“最后一个”数字,然后将其过滤为这些数字中的最高值。完成了,很有魅力。谢谢@andlrc和其他人的帮助和建议。@seattles现在是时候读两遍并自己重写了:-)我想你可以将
.values(uu.mapValues(asset.reduce(…),…),…)
更改为类似
.reduce(…).mapValues(…).values(…).value()
@和lrc是的链接很好的调用(绝对更具可读性)
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"]