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
。
添加回答
舉報