Javascript 加上一句「;及;到字符串中的最后一个单词-js/Angular

Javascript 加上一句「;及;到字符串中的最后一个单词-js/Angular,javascript,angularjs,Javascript,Angularjs,我已经解决了这个问题,但我想看看是否有更好的方法来解决这个问题。Fiddle-所以我要做的是检查是否有2个+ID,然后将字符串转换成数组,取最后一个数组项并添加“and”,将其放回一起并显示 我想看看是否有更好的方法来压缩这种假设。我在项目中使用Angular,而不是在示例中。基本上,listArr是$scope.listArr,issues是$user.issues JS: HTML: {{listArr} 为什么不直接从数组中更改数组的最后一个元素,而不弹出并再次将其推回,如下所示:str[

我已经解决了这个问题,但我想看看是否有更好的方法来解决这个问题。Fiddle-所以我要做的是检查是否有2个+ID,然后将字符串转换成数组,取最后一个数组项并添加“and”,将其放回一起并显示

我想看看是否有更好的方法来压缩这种假设。我在项目中使用Angular,而不是在示例中。基本上,listArr是$scope.listArr,issues是$user.issues

JS:

HTML:

{{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,但总是忘了做什么:]