数组扁平化 函数柯里化

一.数组扁平化

数组扁平化主要的表现就是把多层嵌套的数组拉平,变成一维数组

看案例

var arr = [1, 2, 3, [4, 3, [2, 7], 2], 5, [5, 9, 10], 7];
		function func(user){
			let arr1 = [];
			for(var i=0;i<user.length;i++){
				if(Array.isArray(user[i])==false){
					arr1.push(user[i]);
				}else{
					arr1 = arr1.concat(func(user[i]))
				}
			}
			arr = arr1;
			return arr;
		}
		function func(user){
			let arr1 = [];
			user.forEach((item)=>{
				Array.isArray(item)==false?arr1.push(item):arr1 = arr1.concat(func(item))
			})
			arr = arr1;
			return arr;
		}
		func(arr);
		console.log(arr);
		
		function add(x, y) {
			return x + y
		}

二.函数柯里化

1.概括

柯里化(Currying)又称部分求值,一个柯里化的函数首先会接收一些参数,接收了这些参数后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来。待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。
柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)©或者f(a,
b)©或者f(a)(b, c)

2.案例

函数柯里化
		function curryingAdd(x) {
			return function (y) {
				return x + y
			}
		}
		function binds() {
			return function (x,y) {
				return x + y
			}
		}
		console.log(add(1,3));
		console.log(curryingAdd(1)(5));
		console.log(binds()(2,4));
好的,下面是十道和JavaScript中对象、函数数组、运算符、变量、事件有关的高难度简答题及其答案: 1. 什么是闭包?闭包有哪些应用场景? 答:闭包是指有权访问另一个函数作用域中变量的函数。闭包常用于封装变量,延长变量的生命周期,从而实现函数间数据共享和保护。闭包还可以用来模拟私有变量和缓存数据。 2. 如何判断一个对象是否为数组? 答:可以使用 Array.isArray() 方法判断一个对象是否为数组。该方法返回一个布尔值,如果对象是数组则返回 true,否则返回 false。 3. 如何实现一个继承自另一个对象的对象? 答:可以使用 Object.create() 方法实现一个继承自另一个对象的对象。该方法接收一个参数,即要继承的对象,返回一个新的对象,该对象的原型指向要继承的对象。 4. 如何实现一个简单的 Promise? 答:可以使用构造函数和原型链实现一个简单的 Promise。具体实现可参考下面的代码: ```javascript function Promise(fn) { var self = this; self.value = null; self.error = null; self.onFulfilled = null; self.onRejected = null; function resolve(value) { setTimeout(function() { self.value = value; self.onFulfilled(self.value); }, 0); } function reject(error) { setTimeout(function() { self.error = error; self.onRejected(self.error); }, 0); } fn(resolve, reject); } Promise.prototype.then = function(onFulfilled, onRejected) { var self = this; self.onFulfilled = onFulfilled; self.onRejected = onRejected; }; ``` 5. 如何实现一个函数柯里化? 答:函数柯里化是指将一个接受多个参数的函数转化为一系列只接受一个参数的函数,并返回一个新的函数,直到所有参数都被收集完成并执行原函数函数柯里化可以用于延迟执行、参数复用、部分应用等场景。具体实现可参考下面的代码: ```javascript function curry(fn, args) { var length = fn.length; args = args || []; return function() { var newArgs = args.concat(Array.prototype.slice.call(arguments)); if (newArgs.length < length) { return curry.call(this, fn, newArgs); } else { return fn.apply(this, newArgs); } } } ``` 6. 如何实现一个函数节流? 答:函数节流是指在一段时间内只执行一次函数,以减少函数的执行次数。具体实现可参考下面的代码: ```javascript function throttle(fn, delay) { var timer = null; return function() { var self = this; var args = arguments; if (!timer) { timer = setTimeout(function() { fn.apply(self, args); timer = null; }, delay); } }; } ``` 7. 如何实现一个函数防抖? 答:函数防抖是指在一定时间内多次触发同一个函数,只执行最后一次,以减少函数的执行次数。具体实现可参考下面的代码: ```javascript function debounce(fn, delay) { var timer = null; return function() { var self = this; var args = arguments; if (timer) { clearTimeout(timer); } timer = setTimeout(function() { fn.apply(self, args); }, delay); }; } ``` 8. 如何实现一个数组去重? 答:可以使用 Set 数据结构实现一个数组去重。Set 是一种无序且唯一的数据集合,可以用来存储各种类型的值。具体实现可参考下面的代码: ```javascript function unique(arr) { return Array.from(new Set(arr)); } ``` 9. 如何实现一个数组扁平化? 答:可以使用递归和 reduce 方法实现一个数组扁平化。具体实现可参考下面的代码: ```javascript function flatten(arr) { return arr.reduce(function(prev, curr) { return prev.concat(Array.isArray(curr) ? flatten(curr) : curr); }, []); } ``` 10. 如何实现一个事件委托? 答:事件委托是指把事件处理函数绑定在父元素上,利用事件冒泡机制实现对子元素的事件响应。事件委托可以提高页面性能,减少事件绑定的数量。具体实现可参考下面的代码: ```javascript document.addEventListener('click', function(event) { if (event.target.matches('.item')) { // 处理子元素的点击事件 } }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值