3 回答

TA貢獻(xiàn)1111條經(jīng)驗 獲得超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貢獻(xiàn)1785條經(jīng)驗 獲得超4個贊
您的版本不會產(chǎn)生預(yù)期的結(jié)果。
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(', ');
}
應(yīng)該這樣做。

TA貢獻(xiàn)1893條經(jīng)驗 獲得超10個贊
對于這類事情,將任務(wù)分解為單獨(dú)的功能,然后根據(jù)需要將它們組合起來可能很有用。這里函數(shù)prop用于獲取屬性name,函數(shù)list用于從名稱數(shù)組生成字符串。兩者結(jié)合在 中l(wèi)istByName,map用于從輸入數(shù)組中的每個對象中獲取名稱。
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([]));
根據(jù)用例,您可能希望為使用無效輸入的情況添加錯誤檢查代碼:例如,沒有 name 屬性的對象,或數(shù)組中的非對象,或輸入 taht 不是傳遞給 的數(shù)組listByName
。
添加回答
舉報