前端面试题:对象的比较

前端面试题,如何比较两个对象是否相等?

定义两个数据如下,比较是否相等

const obj1 = {
	name: "John",
	age: 30,
	address: {
		street: "123 Main St",
		city: "New York",
	},
};

const obj2 = {
	name: "John2",
	age: 30,
	address: {
		street: "123 Main St",
		city: "New York",
	},
};

利用typeof判断,结果如下,不可行

typeof obj1 == "Object"

typeof obj2 == "Object"

JavaScript遗留的问题,typeof null == "Object"

所以以上方式不可行

我们需要逐层递归判断数据是否相等,实现方式如下:

function equal(obj1, obj2) {
	if (typeof obj1 !== typeof obj2) {
		return false;
	}
	if (Object.keys(obj1).length !== Object.keys(obj2).length) {
		return false;
	}

	for (let key in obj1) {
		let isObj = isObject(obj1[key]) && isObject(obj2[key]);
		if (
			(isObj && !equal(obj1[key], obj2[key])) ||
			(!isObj && obj1[key] !== obj2[key])
		) {
			return false;
		}
	}
	return true;
}

你可能感兴趣的:(前端,java,开发语言)