嵌套三元javascript

时间:2016-03-11 17:41:54

标签: javascript nested ternary

在嵌套三元组中遇到一些问题:

简介:

返回:一个字符串,格式为由逗号分隔的名称列表,但最后两个名称除外,这两个名称应以&符号分隔。

示例输入和输出:

list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])
// returns 'Bart, Lisa & Maggie'

list([ {name: 'Bart'}, {name: 'Lisa'} ])
// returns 'Bart & Lisa'

list([ {name: 'Bart'} ])
// returns 'Bart'

我的JS:

var cache = '';
var data = [ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'}];
  for (i = 0 ; i < data.length; i++) {
    var people = data[i];

        cache += people.name + 
        (i==((length === 2) || (length === -1 )) ? ' & ' : // (if has two or is before last)
        (i==((length >= 3 ) || (length < 2)) ? ', ' : '') //not:(if has two or is before last) + >= 3 or < 2
        );
  }

三是工作但不是一两个

6 个答案:

答案 0 :(得分:3)

这是我的方法:

function list(arr) {
  return arr.map(function(person) { return person.name; }) // Use only .name
  .join(", ") // Join with ", "
  .replace(/, (?!.*, )/, " & "); // Replace last ", " with " & "
}

答案 1 :(得分:2)

我试过这样的事情:

M(B,2)==1
M(N,2)!=1

答案 2 :(得分:1)

我认为您的逻辑仅适用于长度检查。

var cache = '';
var data = [ {name: 'Homer'}, {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'}];

for (i = 0 ; i < data.length; i++) {
var people = data[i];

    cache += people.name + 
    (i < (data.length - 2) ? ', ' : 
        (i === (data.length - 2) ? ' & ' : ''));
}

结果:"Homer, Bart, Lisa & Maggie"

答案 3 :(得分:0)

这是一种更简单的方法来实现你想要的东西

function list(data) {
  var firstNames = data.slice(0, -1).map(x => x.name).join(', ');
  var lastName = data.slice(-1).map(x => x.name);
  return [firstNames, lastName].filter(Boolean).join(' & ');
}

答案 4 :(得分:0)

这个函数只会在没有任何魔法的情况下通过你的数组进行一次旅行,并且应该产生非常一致的结果。

function getString(data){
    var concat =  data.reduce(function(curr, next, i){
        var separator = (i === data.length - 1) ? ' & ' : ', ';
        return {name: curr.name + separator + next.name};
    });
    return concat.name;
}

答案 5 :(得分:0)

我是这样做的

var list = (names) =>  names.map(person => person.name).join(', ').replace(/(.*),(.*)$/, "$1 &$2")

请注意,箭头功能符合ES6。