Я пытаюсь создать функцию, которая будет принимать список слов и преобразовывать его в такое предложение, как это.
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
}
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([]));
Один из способов - снять последний элемент, а затем присоединиться и поместить последний элемент в жало.
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)))
Функция, которую вы закомментировали, кажется правильной, за исключением того, что она использует некоторое свойство 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'
Очевидно, вы можете немного изменить это, если хотите использовать оксфордскую запятую.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.