切换字符串中的数字
Switch numbers in string
我有一个由 space 分隔的唯一数字的字符串,如下所示:
"2 4 13 14 28 33"
需要一种快速有效的方式来切换一对形式:
switchNumbers(2, 28)
// result: "28 4 13 14 2 33"
我可以拆分字符串并搜索值,但这听起来很无聊。有更好的主意吗?
您可以利用 array
函数代替 strings
。
查看代码内嵌注释:
var str = "2 4 13 14 28 33";
// Don't use `switch` as name
function switchNumbers(a, b) {
var arr = str.split(' ');
// Convert string to array
// Get the index of both the elements
var firstIndex = arr.indexOf(a.toString());
var secondIndex = arr.indexOf(b.toString());
// Change the position of both elements
arr[firstIndex] = b;
arr[secondIndex] = a;
// Return swapped string
return arr.join(' ');
}
alert(switchNumbers(2, 28));
我认为您最好的解决方案可能是对字符串使用 JavaScript 的本机替换方法。
W3Schools 有一个很好的低调 here。它应该完全符合您的要求,但可能会替换您指定的所有数字,所以一定要说 var replacement = str.replace("2 ", "28 ");
编辑:指出了一个很好的缺陷。相反,您可以尝试:
EDIT2:糟糕,原始代码中存在一些缺陷。经过测试并且工作正常! :)
function replaceNumbers(x1, x2, str) {
var strMod = " " + str + " "
var x1Mod = " " + x1 + " "
var x2Mod = " " + x2 + " "
// Want to replace "farthest" first to ensure correct replacement.
if (str.indexOf(x1Mod) > str.indexOf(x2Mod)) {
strMod = strMod.replace(x1Mod, x2Mod)
strMod = strMod.replace(x2Mod, x1Mod)
} else {
strMod = strMod.replace(x2Mod, x1Mod)
strMod = strMod.replace(x1Mod, x2Mod)
}
return strMod.slice(1, strMod.length - 1)
}
var numbers = "2 4 13 14 28 33";
alert(replaceNumbers(2, 33, numbers))
类似的东西应该有用。
var str= "2 4 13 14 28 33";
function switchNumbers(a, b) {
var arr = str.split(" ");
var first= arr.indexOf(a), second = arr.indexOf(b);
arr[first] = arr.splice(second, 1, arr[first])[0];
return arr.join(" ");
}
var str = "2 4 13 14 28 33";
switchNumbers(2,28); // call
function switchNumbers(a,b)
{
var split_ = str.split(" ");
var index_of_1 = split_.indexOf(a+"");
var index_of_2 = split_.indexOf(b+"")
temp = split_[index_of_1];
split_[index_of_1] = split_[index_of_2] ;
split_[index_of_2] = temp ;
split_.toString(" "); // Answer
}
也试试:
var numbers = "2 4 13 14 28 33";
function switchNum(from, to){
return numbers.replace(/\d+/g, function(num){
return num == from ? to : num == to ? from : num
})
}
alert(switchNum(2, 28)) //result: "28 4 13 14 2 33"
注意:不要使用switch
作为函数名,switch是对JavaScript的声明。
我无法判断这是否无聊但至少它不是分裂和循环:)
function switchNumbers(str, x, y) {
var regexp = new RegExp('\b(' + x + '|' + y + ')\b', 'g'); // /\b(x|y)\b/g
return str.replace(regexp, function(match) { return match == x ? y : x; });
}
var s = "2 4 13 14 28 33";
document.write('<pre>' + switchNumbers(s, 2, 28) + '</pre>');
我确定这不是最好的方法..但它有效..
var swapnums = function(x,first,second) {
var y = x.split(" ");
var locOfFirst = y.indexOf(first.toString());
var locOfSecond = y.indexOf(second.toString());
y[locOfFirst] = second.toString();
y[locOfSecond] = first.toString();
return y.join(" ");
};
我有一个由 space 分隔的唯一数字的字符串,如下所示:
"2 4 13 14 28 33"
需要一种快速有效的方式来切换一对形式:
switchNumbers(2, 28)
// result: "28 4 13 14 2 33"
我可以拆分字符串并搜索值,但这听起来很无聊。有更好的主意吗?
您可以利用 array
函数代替 strings
。
查看代码内嵌注释:
var str = "2 4 13 14 28 33";
// Don't use `switch` as name
function switchNumbers(a, b) {
var arr = str.split(' ');
// Convert string to array
// Get the index of both the elements
var firstIndex = arr.indexOf(a.toString());
var secondIndex = arr.indexOf(b.toString());
// Change the position of both elements
arr[firstIndex] = b;
arr[secondIndex] = a;
// Return swapped string
return arr.join(' ');
}
alert(switchNumbers(2, 28));
我认为您最好的解决方案可能是对字符串使用 JavaScript 的本机替换方法。
W3Schools 有一个很好的低调 here。它应该完全符合您的要求,但可能会替换您指定的所有数字,所以一定要说 var replacement = str.replace("2 ", "28 ");
编辑:指出了一个很好的缺陷。相反,您可以尝试:
EDIT2:糟糕,原始代码中存在一些缺陷。经过测试并且工作正常! :)
function replaceNumbers(x1, x2, str) {
var strMod = " " + str + " "
var x1Mod = " " + x1 + " "
var x2Mod = " " + x2 + " "
// Want to replace "farthest" first to ensure correct replacement.
if (str.indexOf(x1Mod) > str.indexOf(x2Mod)) {
strMod = strMod.replace(x1Mod, x2Mod)
strMod = strMod.replace(x2Mod, x1Mod)
} else {
strMod = strMod.replace(x2Mod, x1Mod)
strMod = strMod.replace(x1Mod, x2Mod)
}
return strMod.slice(1, strMod.length - 1)
}
var numbers = "2 4 13 14 28 33";
alert(replaceNumbers(2, 33, numbers))
类似的东西应该有用。
var str= "2 4 13 14 28 33";
function switchNumbers(a, b) {
var arr = str.split(" ");
var first= arr.indexOf(a), second = arr.indexOf(b);
arr[first] = arr.splice(second, 1, arr[first])[0];
return arr.join(" ");
}
var str = "2 4 13 14 28 33";
switchNumbers(2,28); // call
function switchNumbers(a,b)
{
var split_ = str.split(" ");
var index_of_1 = split_.indexOf(a+"");
var index_of_2 = split_.indexOf(b+"")
temp = split_[index_of_1];
split_[index_of_1] = split_[index_of_2] ;
split_[index_of_2] = temp ;
split_.toString(" "); // Answer
}
也试试:
var numbers = "2 4 13 14 28 33";
function switchNum(from, to){
return numbers.replace(/\d+/g, function(num){
return num == from ? to : num == to ? from : num
})
}
alert(switchNum(2, 28)) //result: "28 4 13 14 2 33"
注意:不要使用switch
作为函数名,switch是对JavaScript的声明。
我无法判断这是否无聊但至少它不是分裂和循环:)
function switchNumbers(str, x, y) {
var regexp = new RegExp('\b(' + x + '|' + y + ')\b', 'g'); // /\b(x|y)\b/g
return str.replace(regexp, function(match) { return match == x ? y : x; });
}
var s = "2 4 13 14 28 33";
document.write('<pre>' + switchNumbers(s, 2, 28) + '</pre>');
我确定这不是最好的方法..但它有效..
var swapnums = function(x,first,second) {
var y = x.split(" ");
var locOfFirst = y.indexOf(first.toString());
var locOfSecond = y.indexOf(second.toString());
y[locOfFirst] = second.toString();
y[locOfSecond] = first.toString();
return y.join(" ");
};