js面试题分享

本文介绍了在JavaScript中使用Array.from()和Map实现数组去重的方法,以及如何将URL转换为location对象,包括处理协议、主机名、端口和查询参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组去重

数字数组
const arr1 = [1,2,3,4.4,32,121,4,5,5,6,2]
function arrayUnique(array) {
	return Array.from(new Set(arr1));
}
console.log(arrayUnique(arr1)); // [1, 2, 3, 4.4, 32, 121, 4, 5, 6]
数组对象去重
  • 方案1

    const arr2 = [
    	{ name: 'a1', value: 1 },
    	{ name: 'a2', value: 1 },
    	{ name: 'a3', value: 1 },
    	{ name: 'a4', value: 1 },
    	{ name: 'a4', value: 1 },
    	{ name: 'a3', value: 1 },
    	{ name: 'a2', value: 1 },
    	{ name: 'a1', value: 1 },
    ];
    function arrayUnique(array, str) {
    	let obj = {};
    	return array.reduce((pre, cur) => {
    		obj[cur[str]] ? '' : obj[cur[str]] = pre.push(cur);
    		return pre;
    	}, [])
    }
    
  • 方案2

    const arr2 = [
    	{ name: 'a1', value: 1 },
    	{ name: 'a2', value: 1 },
    	{ name: 'a3', value: 1 },
    	{ name: 'a4', value: 1 },
    	{ name: 'a4', value: 1 },
    	{ name: 'a3', value: 1 },
    	{ name: 'a2', value: 1 },
    	{ name: 'a1', value: 1 },
    ];
    function arrayUnique(array, str) {
    	let map = new Map();
    	array.forEach(ele => {
    		map.set(ele[str], ele);
    	});
    	return [...map.values()]
    }
    console.log(arrayUnique(arr2, 'name'));
    

给定一个url,转为location对象

const url1 = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=mapbox';

function createLocationObj(str) {
	let obj = {};
	const a1 = url1.split('://')
	obj['protocol'] = a1[0];
	let b;
	if (a1[1].includes(':')) {
		const a2 = a1[1].split(':');
		obj['hostname'] = a2[0];
		b = a2[1].split('/');
		obj['port'] = b[0]
	} else {
		b = a1[1].split('/');
		obj['hostname'] = b[0];
		obj['port'] = obj.protocol === 'https' ? '443' : '8080';
	}
	const a3 = b[1].split('?');
	obj['pathname'] = `/${a3[0]}`;
	const a4 = a3[1].split('&');
	let _params = {};
	a4.forEach(ele => {
		const a5 = ele.split('=');
		_params[a5[0]] = a5[1]
	});
	obj['query'] = _params;
	return obj;
}
console.log('-', createLocationObj(url1));
// {
// 	hostname: "www.baidu.com"
// 	pathname: "/s"
// 	port: "443"
// 	protocol: "https"
// 	query: {
// 		f: "8"
// 		ie: "utf-8"
// 		rsv_bp: "1"
// 		rsv_idx: "1"
// 		tn: "baidu"
// 		wd: "mapbox"
// 	}
// }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值