如何输出字符串列表而不是 [object : object]?

How do I output a list of strings instead of [object : object]?

我无法输出像 Bart、Lisa & Maggie 这样的名字列表,但有一个 [object: object]、[object, object] & [object, object] 代替。

代码如下:

let names = null;

function list(names) {
  return names.slice(0, names.length - 2).join(', ') + ', ' +
    names.slice(names.length - 2, names.length + 1).join(' & ');
}

console.log(list(names));

假设您的 names 数组如下所示:

const names = [{name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'}]

我认为你可以这样做:

const names = [{name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'}]

function list(names){
  let str = '';
  if (names.length !== 0) {
    // Get the last name and remove it from the names array
    let last = names.pop();

    if (names.length !== 0) { // names may be empty if there was only one value in the initial names array
      // Then you need to transform your array from [{name: 'Bart'},...]
      // to ['Bart', 'Lisa', 'Maggie'] :
      str = names.map( (val, i, arr) => {
        if (i !== arr[arr.length - 1]) {
          return val.name;
        }
      }).join(', ')
      // From here, str is equal to "Bart, Lisa"
      // Now we add "& Maggie" to the string
      str += ' & ' + last.name;
    }
  }

  return str;
}

console.log(list(names))
// "Bart, Lisa & Maggie"

(编辑)或者这是另一种方法,通过保留您的初始代码:

const names = [{name: 'Bart'}, {name: 'Lisa'}, {name: 'Maggie'}]

function list(names){
  return names.slice(0, names.length - 2).map(value => value.name).join(', ') + ', ' +
    names.slice(names.length - 2, names.length + 1).map(value => value.name).join(' & ');
}

console.log(list(names))
// "Bart, Lisa & Maggie"