今天遇到的 node.js 的笔试题,我在解这道题的时候,有个问题我不太明白,感觉自己傻 X 了

2021-05-19 19:32:48 +08:00
 ChrisFreeMan
function checkLegalStr(str=''){
  return (str !== '' && str !== '-' && str !== 'N/A')
}

function handleObject(obj={}){
  for(let key in obj){
    if(typeof obj[key] === 'object'){
      handleObject(obj[key]);
    }else if(Array.isArray(obj[key])){
      obj[key] = obj[key].filter(item=>{return checkLegalStr(item);});
    }else{
      if(!checkLegalStr(obj[key])){
        delete obj[key];
      }
    }
  }
}

const obj = {
  name: { first: 'Robert', middle: '', last: 'Smith' },
  age: 25,
  DOB: '-',
  hobbies: [ 'running', 'coding', '-' ],
  education: { highschool: 'N/A', college: 'Yale' }
};

console.log(obj);
handleObject(obj);
console.log(obj);

为啥这个结果 obj.hobbies 会有一个空值<1 empty item>

以下是前后输出

{
  name: { first: 'Robert', middle: '', last: 'Smith' },
  age: 25,
  DOB: '-',
  hobbies: [ 'running', 'coding', '-' ],
  education: { highschool: 'N/A', college: 'Yale' }
}
{
  name: { first: 'Robert', last: 'Smith' },
  age: 25,
  hobbies: [ 'running', 'coding', <1 empty item> ],
  education: { college: 'Yale' }
}

实在是奇怪,我感觉我好水啊,有知道的大哥吗

1778 次点击
所在节点    Node.js
4 条回复
yimity
2021-05-19 19:41:19 +08:00
typeof [] === "object" // true
ChrisFreeMan
2021-05-19 19:45:00 +08:00
@yimity 嗷嗷知道了,多谢大哥
Elethom
2021-05-19 19:54:23 +08:00
@yimity
这个有比 x.constructor === Object 更好的判断方法吗?
yimity
2021-05-19 20:29:56 +08:00
Object.prototype.toString.call({}) === "[object Object]"
Object.prototype.toString.call([]) === "[object Array]"
Object.prototype.toString.call(5) === "[object Number]"
...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777978

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX