Javascript 加上一句「;及;到字符串中的最后一个单词-js/Angular
我已经解决了这个问题,但我想看看是否有更好的方法来解决这个问题。Fiddle-所以我要做的是检查是否有2个+ID,然后将字符串转换成数组,取最后一个数组项并添加“and”,将其放回一起并显示 我想看看是否有更好的方法来压缩这种假设。我在项目中使用Angular,而不是在示例中。基本上,listArr是$scope.listArr,issues是$user.issues JS: HTML:Javascript 加上一句「;及;到字符串中的最后一个单词-js/Angular,javascript,angularjs,Javascript,Angularjs,我已经解决了这个问题,但我想看看是否有更好的方法来解决这个问题。Fiddle-所以我要做的是检查是否有2个+ID,然后将字符串转换成数组,取最后一个数组项并添加“and”,将其放回一起并显示 我想看看是否有更好的方法来压缩这种假设。我在项目中使用Angular,而不是在示例中。基本上,listArr是$scope.listArr,issues是$user.issues JS: HTML: {{listArr} 为什么不直接从数组中更改数组的最后一个元素,而不弹出并再次将其推回,如下所示:str[
{{listArr}
为什么不直接从数组中更改数组的最后一个元素,而不弹出并再次将其推回,如下所示:str[str.length-1]='和'+str[str.length-1]
我还删减了一系列代码行:
var issuesId = [1, 2, 3, 4]
var issues = "issue one, issue two, issue three, issue four";
var listArr = issues;
if (issuesId.length >= 2) {
var str = issues.split(', ');
str[str.length - 1] = 'and ' + str[str.length - 1];
listArr = str.join(', ');
}
document.getElementById('text').innerHTML = listArr;
为什么不直接从数组中更改数组的最后一个元素,而不弹出并再次将其推回,如下所示:
str[str.length-1]='和'+str[str.length-1]
我还删减了一系列代码行:
var issuesId = [1, 2, 3, 4]
var issues = "issue one, issue two, issue three, issue four";
var listArr = issues;
if (issuesId.length >= 2) {
var str = issues.split(', ');
str[str.length - 1] = 'and ' + str[str.length - 1];
listArr = str.join(', ');
}
document.getElementById('text').innerHTML = listArr;
更实用的风格。试试这个:
var issuesId =[1,2,3,4]
var issues = "issue one, issue two, issue three, issue four";
if(issuesId.length >= 2){
var arr = issues.split(',');
arr = arr.map(function(phrase, index){
if(index < arr.length - 1)
phrase+=' and';
return phrase;
})
issues = arr.join(', ');
}
console.log(issues);
var issuesId=[1,2,3,4]
var issues=“第一期、第二期、第三期、第四期”;
如果(IssuseId.length>=2){
var arr=issues.split(',');
arr=arr.map(函数(短语、索引){
如果(索引
更多功能性风格。试试这个:
var issuesId =[1,2,3,4]
var issues = "issue one, issue two, issue three, issue four";
if(issuesId.length >= 2){
var arr = issues.split(',');
arr = arr.map(function(phrase, index){
if(index < arr.length - 1)
phrase+=' and';
return phrase;
})
issues = arr.join(', ');
}
console.log(issues);
var issuesId=[1,2,3,4]
var issues=“第一期、第二期、第三期、第四期”;
如果(IssuseId.length>=2){
var arr=issues.split(',');
arr=arr.map(函数(短语、索引){
如果(索引
通常,我会将字符串操作包装成一个函数,将其与实际的dom操作分开:
function mkStr(issues) {
var delimeter = ', ';
if (issues.length < 2) {
return issues;
} else {
let parts = issues.split(delimeter);
let last = "and " + parts.pop();
parts.push(last);
return parts.join(delimeter);
}
}
document.getElementById('text').innerHTML = mkStr(issues);
mkStr("a, b, c"); // "a, b, and c"
功能mkStr(问题){
变量delimeter=',';
如果(问题长度<2){
退货问题;
}否则{
让零件=问题。拆分(delimeter);
让last=“and”+parts.pop();
零件。推(最后);
返回零件。连接(delimeter);
}
}
document.getElementById('text').innerHTML=mkStr(问题);
mkStr(“a、b、c”);//a、b和c
但是,也许,您更希望将“a、b和c”作为一个输出-这在某种程度上更自然。然后你可以这样做:
function mkStr2(issues) {
var delimeter = ', ';
if (issues.length < 2) {
return issues;
} else {
let parts = issues.split(delimeter);
let last = parts.pop();
return parts.join(delimeter) +
" and " +
last;
}
}
mkStr2("a, b, c"); // "a, b, and c"
功能mkStr2(问题){
变量delimeter=',';
如果(问题长度<2){
退货问题;
}否则{
让零件=问题。拆分(delimeter);
让last=parts.pop();
返回零件。连接(delimeter)+
“和”+
最后;
}
}
mkStr2(“a、b、c”);//a、b和c
通常,我会将字符串操作包装成一个函数,将其与实际的dom操作分开:
function mkStr(issues) {
var delimeter = ', ';
if (issues.length < 2) {
return issues;
} else {
let parts = issues.split(delimeter);
let last = "and " + parts.pop();
parts.push(last);
return parts.join(delimeter);
}
}
document.getElementById('text').innerHTML = mkStr(issues);
mkStr("a, b, c"); // "a, b, and c"
功能mkStr(问题){
变量delimeter=',';
如果(问题长度<2){
退货问题;
}否则{
让零件=问题。拆分(delimeter);
让last=“and”+parts.pop();
零件。推(最后);
返回零件。连接(delimeter);
}
}
document.getElementById('text').innerHTML=mkStr(问题);
mkStr(“a、b、c”);//a、b和c
但是,也许,您更希望将“a、b和c”作为一个输出-这在某种程度上更自然。然后你可以这样做:
function mkStr2(issues) {
var delimeter = ', ';
if (issues.length < 2) {
return issues;
} else {
let parts = issues.split(delimeter);
let last = parts.pop();
return parts.join(delimeter) +
" and " +
last;
}
}
mkStr2("a, b, c"); // "a, b, and c"
功能mkStr2(问题){
变量delimeter=',';
如果(问题长度<2){
退货问题;
}否则{
让零件=问题。拆分(delimeter);
让last=parts.pop();
返回零件。连接(delimeter)+
“和”+
最后;
}
}
mkStr2(“a、b、c”);//a、b和c
最短的解决方案是使用正则表达式:
var s = "a, b, c";
s.replace(/ ([^,]*)$/, " and $1"); // "a, b, and c"
或:
最短的解决方案是使用正则表达式:
var s = "a, b, c";
s.replace(/ ([^,]*)$/, " and $1"); // "a, b, and c"
或:
我认为你的方法非常有效。我认为你的方法唯一的问题是,你最终会得到一个不正确的句子,因为它会插入一个
,
在之前,当不需要时,则在angularjs
下标记此问题-该方法与angularjs方法不同我认为这是因为代码用于Angular,但JSFIDLE不是,因此显示的代码是来自JSFIDLE的代码,而不是Angular代码。我想象在角度代码中,值只是分配给作用域上的listArr
。可能您的特定用例需要只有两个项目的逗号,但这通常是不正确的。我认为您的方法非常有效。我看到您的方法的唯一问题是,您最终得到的句子不正确,因为它将插入一个,
在之前,当不需要时,在和之前。这个问题被标记在angularjs
下-这种方法与angularjs方法完全不同。我认为这是因为代码是在Angular中使用的,而jsfiddle不是,所以显示的代码是来自jsfiddle的代码,而不是Angular代码。我想在角度代码中,该值只是分配给作用域上的listArr
。可能您的特定用例只需要两个逗号,但这通常是不正确的。这非常完美,谢谢。如果你有时间的话,你介意简要介绍一下你的工作吗。我以前用过RegEx和love,但总是忘记做什么:]这是完美的谢谢。如果你有时间的话,你介意简要介绍一下你的工作吗。我以前用过RegEx和love,但总是忘了做什么:]