【问题标题】:How do I output a list of strings instead of [object : object]?如何输出字符串列表而不是 [object : object]?
【发布时间】:2021-06-21 19:19:25
【问题描述】:

我无法输出像 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 是什么?

标签: javascript arrays string format


【解决方案1】:

假设您的 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"

【讨论】:

  • 您好,请您解释一下我使用 slice 将数组的一部分复制到新数组后添加 .map() 的原因吗?我感到很困惑,为什么我不能只使用 join() 将这些数组元素放在一起并作为新字符串返回?谢谢。
  • 这是因为切片时会得到一个包含对象的数组,例如:[{name: 'Bart'}, {name: 'Lisa'}]。但是一个对象不能显示为字符串(这就是你得到[object: object]的原因),你想显示每个对象的name属性。所以你使用 map() 将[{name: 'Bart'}, {name: 'Lisa'}] 转换为['Bart', 'Lisa']。不知道解释的好不好
  • 现在我明白为什么我一直使用对象而不是字符串。谢谢!
猜你喜欢
  • 2021-04-05
  • 2021-07-12
  • 2019-03-31
  • 2011-07-27
  • 2021-11-15
  • 2017-09-16
  • 2016-03-19
  • 1970-01-01
  • 2022-11-03
相关资源
最近更新 更多