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"]