Я пытаюсь создать функцию, которая будет принимать список слов и преобразовывать его в такое предложение, как это.

Jsfiddle

http://jsfiddle.net/0ht35rpb/107/

// список массивов

"contents": {
   "0": ["emotional distress", "behavioural difficulties", "hyperactivity and concentration difficulties", "difficulties in getting along with other young people"],
   "5": ["kind and helpful behaviour"]
}

//sentence

"<p>Score for emotional distress, behavioural difficulties, hyperactivity and concentration difficulties very high and difficulties in getting along with other young people very high</p>
<p>Score for kind and helpful behaviour very low</p>"

// текущая функция

grammarCheck : function(vals) {
  //x,y,z and d
  //z
  var count = vals.length;

  var text = vals.join(', ')

  //return [ this.props.data.contents[key].slice(0, -1).join(", "), this.props.data.contents[key].slice(-1)[0] ].join(this.props.data.contents[key].length < 2 ? "" : " and ");

  return text
}
-5
The Old County 30 Авг 2017 в 22:09

3 ответа

Лучший ответ

Это должно работать.

function createSentence(array) {
  if (array.length == 1) {
    return array[0];
  } else if (array.length == 0) {
    return "";
  }
  var leftSide = array.slice(0, array.length - 1).join(", ");
  return leftSide + " and " + array[array.length - 1];
}

console.log(createSentence(["dogs", "cats", "fish"]));
console.log(createSentence(["dogs", "cats"]));
console.log(createSentence(["dogs"]));
console.log(createSentence([]));
1
Steven Goodman 30 Авг 2017 в 19:20

Один из способов - снять последний элемент, а затем присоединиться и поместить последний элемент в жало.

function grammarCheck(vals) {
      //x,y,z and d
      //z
      var count = vals.length;

      var last = vals.pop()
      
      var text = vals.join(', ') + (vals.length > 1 ? ' and ' : '') + last

      return text
    }
    
    
    var arr = [
          ["emotional distress"],
          ["abc", "123", "blah", "blah", "blah"]
    ]
    
    arr.forEach(a => console.log('grammar check', grammarCheck(a)))
0
Get Off My Lawn 30 Авг 2017 в 19:24

Функция, которую вы закомментировали, кажется правильной, за исключением того, что она использует некоторое свойство off this, а не передаваемый ей параметр.

Приспосабливая это, вы получаете это:

const grammarCheck = function(vals) {
  return [ vals.slice(0, -1).join(", "), vals.slice(-1)[0] ]
         .join(vals.length < 2 ? "" : " and ");
}
grammarCheck(['foo']); //=> 'foo'
grammarCheck(['foo', 'bar']); //=> 'foo and bar'
grammarCheck(['foo', 'bar', 'baz']); //=> 'foo, bar and baz'
grammarCheck(['foo', 'bar', 'baz', 'qux']); //=> 'foo, bar, baz and qux'

Очевидно, вы можете немного изменить это, если хотите использовать оксфордскую запятую.

0
Scott Sauyet 30 Авг 2017 в 19:23