面试题:写对象属性名去重的方法
时间: 2023-08-10 15:09:45 浏览: 49
可以使用 Set 数据结构来实现对象属性名去重的方法,具体实现如下:
```javascript
function uniquePropertyNames(obj) {
let propertyNames = new Set();
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
propertyNames.add(key);
}
}
return Array.from(propertyNames);
}
```
使用示例:
```javascript
const obj = {
name: 'Alice',
age: 20,
name: 'Bob',
gender: 'male',
age: 25
};
console.log(uniquePropertyNames(obj)); // ['name', 'age', 'gender']
```
注意:这种方法只能去除对象自身的重复属性名,如果属性名相同但所属的原型链不同,仍会算作不同的属性名。
相关问题
面试题:springAOP
Spring AOP(Aspect-Oriented Programming)是Spring框架的一个重要特性,它允许开发者通过一种非侵入式的方式来实现横切关注点的模块化。AOP可以帮助开发者将应用程序的关注点分离开来,如日志记录、事务管理、安全性检查等,从而提高代码的可维护性和可扩展性。
在Spring AOP中,开发者可以通过定义切点(Pointcut)和切面(Aspect)来实现横切关注点的处理。切点是一组匹配连接点(Join Point)的表达式,而连接点则是在应用程序中可以插入切面的特定位置,如方法执行前、执行后、抛出异常时等。开发者可以通过在切面中定义通知(Advice)来指定在连接点上执行的操作,如前置通知(Before Advice)、后置通知(After Advice)、异常通知(After Throwing Advice)等。
Spring AOP提供了两种类型的代理方式:JDK动态代理和CGLIB动态代理。JDK动态代理基于Java的反射机制来生成代理类,要求目标对象实现一个或多个接口;而CGLIB动态代理则通过生成目标类的子类来实现代理,不要求目标对象实现接口。
使用Spring AOP可以带来许多好处,如代码重用、模块化、降低耦合度等。它可以与其他Spring特性(如IoC、DI)无缝集成,提供了一种灵活且强大的方式来处理应用程序的横切关注点。
面试题:vue的双向绑定原理
Vue的双向绑定原理是通过数据劫持和发布-订阅模式实现的。具体的实现步骤如下:
1. Vue会在创建实例时,对数据对象进行递归遍历,使用Object.defineProperty()方法对数据对象的属性进行劫持。
2. 在每个被劫持的属性中,Vue会为其添加一个Dep对象,用于收集依赖和触发更新。
3. 当页面中使用了这些被劫持的属性时,会触发getter方法,依赖收集器(Dep)会将Watcher对象添加到依赖列表中。
4. 当属性的值发生变化时,会触发setter方法,setter会通知Dep对象,Dep对象会通知所有已收集的Watcher对象进行更新。
5. Watcher对象接收到更新通知后,会触发回调函数来更新对应的视图。
通过以上的步骤,Vue实现了双向绑定的功能。当数据发生变化时,视图会自动更新;当用户在视图中输入内容时,数据也会自动更新。这种双向绑定的机制大大简化了开发者对数据和视图之间的同步操作。