javascript 这段代码的短版本会是什么样子?

9rygscc1  于 2022-12-10  发布在  Java
关注(0)|答案(1)|浏览(119)

我使用下面的代码删除JavaScript中嵌套的map对象的内容。它运行得很好,但看起来似乎可以使它更短。有什么想法吗?

if (temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).get(arguments[3]).get(arguments[4]).get(arguments[5]).get(arguments[6]).size == 1) {
  temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).get(arguments[3]).get(arguments[4]).get(arguments[5]).delete(arguments[6])

  if (temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).get(arguments[3]).get(arguments[4]).get(arguments[5]).size == 1) {
    temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).get(arguments[3]).get(arguments[4]).delete(arguments[5])

    if (temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).get(arguments[3]).get(arguments[4]).size == 1) {
      temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).get(arguments[3]).delete(arguments[4])

      if (temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).get(arguments[3]).size == 1) {
        temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).delete(arguments[3])

        if (temp.get(arguments[0]).get(arguments[1]).get(arguments[2]).size == 1) {
          temp.get(arguments[0]).get(arguments[1]).delete(arguments[2])

          if (temp.get(arguments[0]).get(arguments[1]).size == 1) {
            temp.get(arguments[0]).delete(arguments[1])

            if (temp.get(arguments[0]).size == 1) {
              temp.delete(arguments[0])
            }
          }
        }
      }
    }
  }
}
ilmyapht

ilmyapht1#

首先编写一个实用函数,它可以导航到一个给定深度的嵌套Map/Set,这样,你就可以在一个递归函数中使用它来检索嵌套的值,如果它的大小为1,就删除它的外层Map/Set,然后递归直到没有嵌套了,或者直到找到一个大小不是1的值。

const args = [...arguments];
const getNested = length => args
    .slice(0, length)
    .reduce(
        (map, arg) => map.get(arg),
        temp
    );
const deleteNestedIfSize1 = (length) => {
    const nested = getNested(length);
    if (nested.size === 1) {
        getNested(length - 1).delete(args[length - 1]);
        if (length > 1) {
            deleteNestedIfSize1(length - 1);
        }
    }
};

相关问题