`
yiminghe
  • 浏览: 1475445 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

嵌套数组的平坦化

阅读更多

问题:


jquery中大量用到了 array-like 的操作,不可避免遇到了数组嵌套的问题:

 

var x=[1,2,[3,4]];

 

这样的话,就不容易 each 循环操作了,所以需要转化为

 

var x=[1,2,3,4];

 

jquery 经常遇到的是 一维数组中添加元素,而元素又可能是一维数组的情况,如果每一步结果都转化位一维数组,则只需考虑两维数组的嵌套化问题,则

 

var x=[1,2,[3,4,[7,8]]];

 

不在考虑之列。(这种情况当然可以递归处理得到结果)



解决:


首先要看 apply ,它的第二个参数恰好要求是数组形式,则很幸运的处理了结果数组的第一层嵌套 :


function.apply(thisobj, args)

thisobj


The object to which function is to be applied. In the body of the function, thisobj becomes the value of the this keyword. If this argument is null, the global object is used.

args


An array of values to be passed as arguments to function.

Returns

Whatever value is returned by the invocation of function.

另一方面 ,数组的  concat 方法 ,可能变长参数传入,并且参数为数组时自动循环参数数组操作:


concat( ) creates and returns a new array that is the result of concatenating each of its arguments to array. It does not modify array. If any of the arguments to concat( ) is itself an array, the elements of that array are concatenated, rather than the array itself.



结果代码:


于是就有了jquery map 中非常巧妙的平坦化操作 :

 

var x=[1,2,[3,4]];
alert(x.join("|"));
alert([].concat(x).join("|"));
//正确结果
alert(x.concat.apply([],x).join("|"));
 

 

0
0
分享到:
评论

相关推荐

    js代码-将一个非扁平化的数字类型的数组拍平的Generator实现

    这里的关键在于,Generator函数可以处理任意深度的嵌套数组,因为它使用了递归调用来处理子数组。 此外,`README.txt`文件可能包含关于这个代码实现的更多上下文或使用说明,例如如何运行或测试代码,以及可能的...

    matlab开发-平坦的街道

    在MATLAB开发中,“平坦的街道”通常是指将复杂的数据结构转换为更简单、更易于处理的形式,例如将多维数组或嵌套结构扁平化为一维数组。线性化单元阵列树结构则是这一过程的具体应用,它涉及到如何有效地处理具有...

    javascript框架设计读书笔记之数组的扩展与修复

    遇到嵌套数组时,`flatten` 方法能够将多维数组转化为一维数组。通过遍历数组的每个元素,检查元素是否也是数组,如果是,则递归调用 `flatten` 方法;如果不是,则将其添加到结果数组中。这样,最终返回的数组就只...

    利用matlab实现直方图均衡化

    这里通过两个嵌套的 `for` 循环计算每个灰度级的累计概率,将其乘以 255 并四舍五入得到新的灰度级值,存储在 `tab` 数组中。 3. 将原始图像的每个像素值映射到新的灰度级上,即用 `tab` 数组中的对应值替换原来的...

    matlab 直方图均衡实验报告

    直方图的统计表明,均衡化后图像的灰度级分布更平坦,动态范围扩大,这对于处理对比度较低的图像非常有利。 **总结**:虽然此程序仅处理DAT格式的文件,且依赖于fopen函数,限制了其通用性,但其高效算法和直观的...

    ES10的13个新特性示例(小结)

    flat()用于将嵌套的数组结构通过递归遍历和合并,创建一个新数组,而flatMap()结合了map()和flat()的功能,能够先对数组元素进行映射操作,然后进行一维平坦化。 2. Object.fromEntries()方法:此方法用于将键值对...

    Teach.Yourself.Scheme.in.Fixnum.Days

    平坦引擎可以用于执行无嵌套的任务,适合简单的并行处理。 #### 15.3 可嵌套引擎 可嵌套引擎允许在引擎内部启动新的引擎,支持更复杂的并行结构。 ### 16. Shell脚本 #### 16.1 Hello, World! 再次 Scheme可以...

    Linq 语法 总结

    4. **分组(GroupBy)**:`GroupBy()`用于将数据按照一个或多个字段进行分组,可以同时使用`SelectMany()`来平坦化结果。 5. **连接(Join)**:`Join()`用于执行内连接,将两个数据集基于共同的键进行合并。 6. *...

Global site tag (gtag.js) - Google Analytics