练习牛客网笔试题--前端js--49-属性遍历
// 题目描述
// 找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)
// 1、返回数组,格式为 key: value
// 2、结果数组不要求顺序
// 输入
// var C = function() {
// this.foo = 'bar';
// this.baz = 'bim';
// };
// C.prototype.bop = 'bip';
// iterate(new C());
// 输出 ["foo: bar", "baz: bim"]
1.自己的联系
function iterate(obj) {
var arr = [];
var abj = obj.__proto__;
for(var key in obj) {
arr.push(key + ': ' + obj[key]);
}
for(var key in abj) {
var index = arr.indexOf(key + ': ' + abj[key]);
if(index !== '-1') {
arr.splice(index, 1);
}
}
return arr;
}
2.题解
// 1、Object.keys(obj) 只会遍历实例属性key值,不会遍历原型上的属性
function iterate(obj) {
const keyArr = Object.keys(obj)
const temp = []
for(let i in keyArr){
temp[i] = keyArr[i].concat(': ', obj[keyArr[i]])
}
return temp
}
//2、for in 可以遍历到obj的原型属性和方法,如果不想遍历原型上的,可以在循环内通过obj.hasOwnProperty()判断其是否是自己的实例属性
function iterate(obj) {
const temp = []
for(let key in obj){
if(obj.hasOwnProperty(key)){
temp.push(key.concat(': ', obj[key]))
}
}
return temp
}