嵌套三值javascript
使用嵌套三元函数时遇到一些问题: 简介:嵌套三值javascript,javascript,nested,ternary,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' var cache = ''; v
list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])
// returns 'Bart, Lisa & Maggie'
list([ {name: 'Bart'}, {name: 'Lisa'} ])
// returns 'Bart & Lisa'
list([ {name: 'Bart'} ])
// returns 'Bart'
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
);
}
Return:一个字符串,格式为名称列表,用逗号分隔,最后两个名称除外,后面两个名称应用符号分隔
输入和输出示例:
list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])
// returns 'Bart, Lisa & Maggie'
list([ {name: 'Bart'}, {name: 'Lisa'} ])
// returns 'Bart & Lisa'
list([ {name: 'Bart'} ])
// returns 'Bart'
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
);
}
我的JS:
list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ])
// returns 'Bart, Lisa & Maggie'
list([ {name: 'Bart'}, {name: 'Lisa'} ])
// returns 'Bart & Lisa'
list([ {name: 'Bart'} ])
// returns 'Bart'
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
);
}
var缓存=”;
var data=[{name:'Bart'},{name:'Lisa'},{name:'Maggie'}];
对于(i=0;i=3)| |(长度<2))?,,,:''/(如果有两个或在最后一个之前)+>=3或<2
);
}
三个有效,但不是一两个以下是我的方法:
function list(arr) {
return arr.map(function(person) { return person.name; }) // Use only .name
.join(", ") // Join with ", "
.replace(/, (?!.*, )/, " & "); // Replace last ", " with " & "
}
以下是我的方法:
function list(arr) {
return arr.map(function(person) { return person.name; }) // Use only .name
.join(", ") // Join with ", "
.replace(/, (?!.*, )/, " & "); // Replace last ", " with " & "
}
我试过这样的方法:
功能列表(数据){
var-arr=[];
数据映射(函数(v,i){
arr.push(v.name);
});
var last=arr.pop();
返回(arr.length>0)?arr.join(“,”+“&”+last:last;
}
log(列表([{name:'Bart'},{name:'Lisa'},{name:'Maggie'}]);
//返回“巴特、丽莎和玛姬”
log(列表([{name:'Bart'},{name:'Lisa'}]);
//返回“Bart&Lisa”
log(列表([{name:'Bart'}]);
//返回“Bart”
我尝试了以下方法:
功能列表(数据){
var-arr=[];
数据映射(函数(v,i){
arr.push(v.name);
});
var last=arr.pop();
返回(arr.length>0)?arr.join(“,”+“&”+last:last;
}
log(列表([{name:'Bart'},{name:'Lisa'},{name:'Maggie'}]);
//返回“巴特、丽莎和玛姬”
log(列表([{name:'Bart'},{name:'Lisa'}]);
//返回“Bart&Lisa”
log(列表([{name:'Bart'}]);
//返回“Bart”
这里有一个更简单的方法来实现您想要的
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(' & ');
}
这里有一个更简单的方法来完成你想要的
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(' & ');
}
我认为你的逻辑只是对长度的检查
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) ? ' & ' : ''));
}
var缓存=”;
var data=[{name:'Homer'},{name:'Bart'},{name:'Lisa'},{name:'Maggie'}];
对于(i=0;i
结果:
“荷马、巴特、丽莎和玛姬”
我想你的逻辑只是不适合长度检查
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) ? ' & ' : ''));
}
var缓存=”;
var data=[{name:'Homer'},{name:'Bart'},{name:'Lisa'},{name:'Maggie'}];
对于(i=0;i
结果:
“荷马、巴特、丽莎和玛姬”
此函数只在阵列中执行一次,没有任何魔法,并且应产生相当一致的结果
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;
}
这个函数只在数组中执行一次,没有任何魔法,应该会产生相当一致的结果
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;
}
我是这样做的
var list = (names) => names.map(person => person.name).join(', ').replace(/(.*),(.*)$/, "$1 &$2")
请注意,箭头功能符合ES6 我是这样做的
var list = (names) => names.map(person => person.name).join(', ').replace(/(.*),(.*)$/, "$1 &$2")
请注意,箭头功能符合ES6 您根本没有定义
长度
?如果要对最后一个元素进行不同的处理,为什么要迭代所有元素?您可以执行类似于data.slice(0,-1).map(d=>d.name).join(',')+(d.length>1?('&'+data[data.length-1].name):'')的操作。
您根本没有定义length
。如果希望对最后一个元素进行不同的处理,为什么要迭代所有元素?您可以执行类似于data.slice(0,-1).map(d=>d.name).join(',')+(d.length>1?('&'+data[data.length-1].name):'
使用forEach
或将data.map
的返回值分配给arr
,但不能同时使用这两种方法;)@FelixKling当然,我什么时候用了“两者”?好吧,你用的是map
并手动将值推送到数组中。@FelixKling我真是个废物:(
arr=data.map(函数(v,i){return v.name;});Right?使用forEach
或将data.map
的返回值分配给arr
,但不是两者都有;)@FelixKling当然,我什么时候使用了“两者”,您正在使用map
并手动将值推送到数组中。@FelixKling我真是胡说八道:(
就是这样的:arr=data.map(函数(v,i){return v.name;});
对吗?