首页 > 解决方案 > 当反转并加入的数组对象的控制台日志返回一个字母时

问题描述

我有一个包含 2 个对象的数组,当反转并加入这个数组并使用第一个或第二个索引控制日志时,返回的字母类似于“j”、“b”

list = [{
    name: 'anne',
    age: 20,
    gender: 'F'
  },
  {
    name: 'david',
    age: 50,
    gender: 'M'
  },
  {
    name: 'mark',
    age: 33,
    gender: 'M'
  },
]

var val = this.list.slice().reverse().join('');

console.log('val ==> ', val[2]) // val ==>  b

这是什么b?

标签: javascriptarraysstringobject

解决方案


因为您正在使用join(""),所以它调用toString数组中每个项目的方法 - 它们恰好是对象,并且对象的toString方法返回[object Object]

let obj = {};
console.log(obj.toString());

您可以通过JSON.stringify首先映射来避免此问题。

var list = [{name:'anne',age:20,gender:'F'},{name:'david',age:50,gender:'M'},{name:'mark',age:33,gender:'M'}];
const res = this.list.slice().reverse().map(JSON.stringify).join('');
console.log("res[2] ===> ", res[2]); //Returns "n" because {"n are the first three characters in the string
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }

请注意,上面仍然返回一个字符。如果要获取对象,请删除joinand map

var list = [{name:'anne',age:20,gender:'F'},{name:'david',age:50,gender:'M'},{name:'mark',age:33,gender:'M'}];
const res = this.list.slice().reverse();
console.log("res[2] ===> ", res[2]); //Returns "n" because {"n are the first three characters in the string
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }


推荐阅读