仅输出后一个字符串,其中包含 JavaScript 中最大数字的总和的数字
Outputting only the latter string with digits that sum the largest number in javascript
我一直在努力编写一个函数,该函数仅返回后一个字符串,其中包含与最大数字相加的数字(在带有电话号码的数组中)。
我已经研究并发现了一些关于这个问题的好提示。但是,我仍然没有设法以正确的方式对其进行编码。
该函数的方式是,它返回所有排序的数字及其分数,这并没有错,尽管我只需要打印后一个字符串,其中包含对最大数字求和的数字。
这是我的代码块作为一个整体:
function LargestPhoneNumber (array) {
var phoneNumbers = array.map(function (m) {
return {
number: m,
score: m.match(/'d/g).reduce(function (p, c) {
return +p + +c;
})
};
})
phoneNumbers.sort(function (a, b) {
if (a.score < b.score) {
return 1;
}
if (a.score > b.score) {
return -1;
}
return 1;
});
console.log(phoneNumbers);
};
LargestPhoneNumber(['555-555-5555','111-111-1111','555-555-5456','222-121-2121']);
该函数输出:
[ { number: '555-555-5456', score: 50 },
{ number: '555-555-5555', score: 50 },
{ number: '222-121-2121', score: 16 },
{ number: '111-111-1111', score: 10 } ]
以这些输入为例,即使有两个同样大的数字串,预期的输出也应该只是后者:"555-555-5456"
我也尝试过循环,但没有成功。我想我错过了任何一点,我无法意识到它是什么。
您的函数正在显示所有这些,因为您要求它这样做。
console.log(sums[0]); //display only the first item in the array
你的问题实际上涉及两个不同的问题。
第一个相当容易解决,并且已经回答了:如果你只想打印最高总和,那么从降序排序结果中,你只需要打印第一项,而不是整个数组。
但微妙的是,你想要最高金额的后者,如果不止一个。
目前你没有努力确保这一点:由于 JS Array.prototype.sort()
函数不稳定,你无法知道 ex-aequo 的顺序。
要修复它,您不仅必须按总和排序,还必须按等级排序,如下所示:
function LargestPhoneNumber (array) {
var i = 0,
phoneNumbers = array.map(function (m) {
return {
number: m,
rank: i++,
score: m.match(/'d/g).reduce(function (p, c) {
return +p + +c;
})
};
})
phoneNumbers.sort(function (a, b) {
if (a.score < b.score) {
return 1;
}
if (a.score > b.score) {
return -1;
}
// here a.score == b.score, then sort by rank
if (a.rank < b.rank) {
return 1;
}
if (a.rank > b.rank) {
return -1;
}
return 0;
});
console.log(phoneNumbers[0]);
};
LargestPhoneNumber(['555-555-5555','111-111-1111','555-555-5456','222-121-2121']);
无论如何,由于您只对最终结果感兴趣,因此还有另一种更简单的方法可以实现它:
function LargestPhoneNumber (numbers) {
var selected = '',
score = 0,
highestScore = 0;
for (var number of numbers) {
score = number.match(/'d/g).reduce(function (p, c) {
return +p + +c;
});
if (score >= highestScore) {
highestScore = score;
selected = number;
}
}
console.log(selected);
}
LargestPhoneNumber(['555-555-5555','111-111-1111','555-555-5456','222-121-2121']);
相关文章:
- 使用全局变量来存储数字(JavaScript)
- 字符串到数字JavaScript
- 查找总和最大的数字(Javascript)
- 将字符串中的重复字符替换为不断增长的数字 [Javascript]
- 选择下拉选项时显示数字-javascript
- 用户在数字上输入金额,然后输出最高数字javascript
- 字母数字 JavaScript 正则表达式失败
- 仅数字 Javascript 表单验证
- 如何从一组特定的数字中找到最接近的更高数字:javascript
- 将字符串 num 转换为数字 JavaScript
- 将字符串转换为数字 Javascript
- 提取两种模式之间的数字 javascript
- 添加两个十六进制数字 javascript 与位移
- 确定是否按下了字母或数字-Javascript
- 可以't将字符串转换为数字javascript我的代码出了什么问题
- 按布尔值,然后按数字(javascript)对对象数组进行排序
- 正则表达式,用于获取方括号之间的字符串和数字-javascript
- If和Else比较数字JavaScript
- 检查变量是网页上的所有数字javascript
- 同时检查模为0的两个不同数字(Javascript)