首页 > 解决方案 > 扁平化数组的实际应用是什么?

问题描述

为什么需要在现实世界的上下文中展平数组?

我在各种设置中都遇到了这个问题。我在网上搜索,但我找不到我的问题的答案。

function steamrollArray(arr) {
   let flat = [];
   for(let i=0; i<arr.length; i++){
      let toFlatten = arr[i];
      let element = toFlatten;
      if(Array.isArray(toFlatten) ){
        element = steamrollArray(toFlatten);
      }
      flat = flat.concat(element);
   }
  return flat;
}

标签: javascriptalgorithmflatten

解决方案


我贡献的开源代码中使用的列表展平的两个实际应用:

(1) 一些结果元素可能未定义或为空且我们不希望它们出现在列表中的映射。通过使用 flatMap,我们可以将这些元素作为空列表返回,并且它们不会被包含在内(有点像懒人的 reduce :)。

// As an example,
// list only the odd numbers
console.log(
  steamrollArray(
    [1,2,3].map(e => e & 1 ? e : [])));

(2) 我们有这种格式的数据:

{key: value, key: value ...}

其中每个值都是一个列表,在某个地方我们需要使用 each 中所有元素的组合列表value

var a = {key1: [1, 2], key2: [3, 4]}

console.log(
  steamrollArray(Object.values(a)));

推荐阅读