Js数组拍平/扁平化的实现总汇

时间: 2020-02-05阅读: 102标签: 数组

题目:

请写出一个数组拍平函数。效果如下: 

var arr=['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4]; 
flat(arr) //a,b,c,2,d,e,f,g,3,4

 

方法一:使用toString方法先将arr转换为一个字符串, 再以split分割为数组,再将数组里面的元素转换为数字类型

var arr =['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4];
function flat(arr) {
  return arr.toString().split(',').map(function(item){
       return Number(item)
  })
}
console.log(flat(arr))


方法二: toString 格式转换 与方法一类似 都是隐士类型转换  

var arr = ['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4];
// 方法二:toString(格式转换)
var flag = function(arr) {
	let toString = Array.prototype.toString;
	Array.prototype.toString = function() {
		return this.join(',');
	};
	let result = arr + '';
	Array.prototype.toString = toString;
	return result;
};

console.log(flag(arr));


方法三: valueOf(格式转换) 与方法一 二类似 都是隐士类型转化原理  

// 方法三:valueOf(格式转换)
Array.prototype.valueOf = function() {
	return this.join(',');
};

var flat = function(arr) {
	return arr + '';
};
console.log(flat(['a', ['b', 'c'], 2, ['d', 'e', 'f'], 'g', 3, 4]));


方法四: 利用reduce特性

function flat(arr) {
	return newArr = arr.reduce((a, b) => {
		return a.concat(b)
	}, [])
}
var arr = ['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4];
console.log(flat(arr));


方法五:利用递归  

function flat(array) {
	var result = [];
	var each = function(arr) {
		arr.forEach(item => {
			if (item instanceof Array) {
				each(item);
			} else {
				result.push(item);
			}
		});
	};
	each(array);
	return result.join(',');
}
var arr = ['a', ['b', 'c', [7, 8]], 2, ['d', 'e', 'f'], 'g', 3, 4];
console.log(flat(arr));


方法六: ES6的遍历器 Iterator 给数据结构增加遍历器必须增加一个next方法 

// Iterator
Array.prototype[Symbol.iterator] = function() {
	let arr = [].concat(this);
	// arr=['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4]
	let getFirst = function(array) {
		let first = array.shift();
		if (first instanceof Array) {
			if (first.length > 1) {
				arr = first.slice(1).concat(array);
			}
			first = first[0];
		}
		return first;
	};
	return {
		next: function() { //类似与遍历
			let item = getFirst(arr);
			if (item) {
				return {
					value: item,
					done: false,
				};
			} else {
				return {
					done: true,
				};
			}
		},
	};
};
var flat = function(arr) {
	let r = [];
	for (let i of arr) {
		r.push(i);
	} // i 已经是单个元素
	return r.join(',');
};
var arr = ['a', ['b', 'c'], '2', ['d', 'e', 'f'], 'g', 3, 4];
console.log(flat(arr));


 

吐血推荐

1.站长广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入...

2.休闲娱乐: 直播/交友    优惠券领取   网页游戏   H5游戏

链接: http://www.fly63.com/article/detial/7423

JS 数组精简技巧

数组是 JS 最常见的一种数据结构,咱们在开发中也经常用到,在这篇文章中,提供一些小技巧,帮助咱们提高开发效率。

如何使用JavaScript检查数组是否为空?

使用array.length属性检查数组是否为空;此属性返回数组中的元素数量。如果这个数大于0,它的值为true。数组的isArray()方法和length属性可与(&&)操作符一起使用,以确定数组是否存在且是否为空。

如何使用Js替换数组中的项?

想要使用使用JavaScript替换数组中的项,要如何实现?avaScript中的数组类型为我们提供了splice()方法,该方法通过在所需索引处删除和插入新元素来帮助我们替换现有数组的项。

js 数组操作整理

数组的创建要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外的,注意:这时长度会随之改变。

Js实现数组删除重复项

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

Js数组常用方法整理

length:数组的实例属性,返回或设置一个数组中的元素个数。toString():可以把数组转换成字符串,并返回结果。toLocaleString():返回数组中每个元素的本地化表示形式。

JS数组Reduce方法详解

一直以来都在函数式编程的大门之外徘徊,要入门的话首先得熟悉各种高阶函数,数组的reduce方法就是其中之一。reduce方法将会对数组元素从左到右依次执行reducer函数,然后返回一个累计的值

Js Array.from() 将类似数组对象转换成数组

Array.from()会把类似数组的对象转换成真实数组,对象需满足两个条件:具有length属性,length的值即为数组的长度,对象key要是数字,并会作为数组的下标,Array.from()同样会对可遍历的数据结构(如Set)和字符串进行转换

Js二维数组中的查找

在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

Js数组中所有方法(超详细)

concat()把元素衔接到数组中。 every() 方法使用指定函数检测数组中的所有元素:filter()返回满足断言函数的数组元素。forEach()为数组的每一个元素调用指定函数。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全