首页 > 解决方案 > 如何使用空数组填写数量

问题描述

数组的长度固定为 5。

如果长度小于5,我想用一个空数组填充长度,并按顺序排列。

怎么做?

test = [
    ["qwe","0"],
    ["ewq","2"],
    ["aaa","4"],
]

变成

test = [
    ["qwe","0"],
    ["",""],
    ["ewq","2"],
    ["",""],
    ["aaa","4"],
    ["",""],
]

标签: javascriptarrays

解决方案


算法

  1. 将数组的第二项转换array为 a作为键。map您可以在此步骤中使用Array.reduce
  2. 创建一个大小等于的空数组size + 1
  3. 使用Array.map映射数组中的每个项目。如果它的索引在地图中,则在前一个数组中重新创建该项目。否则用“空”槽填充它["", ""]
  4. 调用中描述的函数3size描述map的函数1

执行

// Convert your array to a map
const fillArray = (m, size) => Array(size + 1).fill(0).map((x, idx) => `${idx}` in m ? [m[idx], `${idx}`] : ['', '']);

// Fill the array "in between"
const getArrayMap = arr => arr.reduce((acc, curr) => {
  acc[curr[1]] = curr[0];
  return acc;
}, {});

// Data
const size = 5;
const test = [
  ["qwe", "0"],
  ["ewq", "2"],
  ["aaa", "4"],
];

const filled = fillArray(getArrayMap(test), size);
console.log(filled);

笔记

  • 您可以通过在执行任何测试 if 之前运行检查来优化这一点size - 1 < test.length。如果是这种情况,您不需要运行任何功能
  • test您可以通过过滤数组并删除所有不遵循“标准形状”的项目来使其更加健壮。例如与test.filter(x => x.length === 2)

推荐阅读