3 回答
TA贡献1111条经验 获得超0个赞
你可以这样做:
console.log( list([ {name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'} ]) )
console.log( list([ {name: 'Bart'}, {name: 'Lisa'} ]) )
console.log( list([ {name: 'Bart'} ]) )
console.log( list([]) )
function list(arr){
let len = arr.length;
if(len==0) return '';
return arr.slice(0, len-1).map(p=>p.name).join(", ") + (len>1 ? ' & ' : '') + arr[len-1].name;
}
TA贡献1785条经验 获得超4个赞
您的版本不会产生预期的结果。
function list(names){
if (names.length > 1) {
return `${otherNames(names)} & ${names[names.length - 1].name}`
} else if (names.length === 1) {
return names[0].name
}
return '';
}
function otherNames(array) {
return array.splice(0, array.length - 1).map(person => person.name).join(', ');
}
应该这样做。
TA贡献1893条经验 获得超10个赞
对于这类事情,将任务分解为单独的功能,然后根据需要将它们组合起来可能很有用。这里函数prop用于获取属性name,函数list用于从名称数组生成字符串。两者结合在 中listByName,map用于从输入数组中的每个对象中获取名称。
const list = arr => arr.slice(0,-1).join(", ") + (arr.length>1 ? " & " : "") + arr.slice(-1);
const prop = propName => x => x[propName];
const listByName = arr => list(arr.map(prop('name')))
console.log(listByName([{ name: "Bart" }, { name: "Lisa" }, { name: "Maggie" }]));
console.log(listByName([{ name: "Bart" }, { name: "Lisa" }]));
console.log(listByName([{ name: "Bart" }]));
console.log(listByName([]));
根据用例,您可能希望为使用无效输入的情况添加错误检查代码:例如,没有 name 属性的对象,或数组中的非对象,或输入 taht 不是传递给 的数组listByName
。
添加回答
举报