首页 > 解决方案 > 在数组对象内找到未定义并插入对象

问题描述

这是我的阵列。我有多个对象,其中一些具有 values undefined

var array = [
    { 0: undefined, 1: 32, 2: "four" },
    { 0: undefined, 1: undefined, 2: "three" },
    { 0: undefined, 1: 24, 2: "two" },
    { 0: 14, 1: 24, 2: "five" },
    { 0: 10, 1: 21, 2: "one" },
]

我想检查数组对象是否具有未定义的值,如果它们有任何未定义的值,则应附加下一个对象。

示例在第一个元素{0: undefined, 1: 32, 2: "four"}中,我有0:undefined第二个{0: undefined, 1: undefined, 2: "three"}元素应该替换 this 并且新对象应该形成 which is {0: {0: undefined, 1: undefined, 2: "three"}, 1: 32, 2: "four"}

我知道Array.forEach可以做到这一点。如果它是数组,我可以通过使用Array.splice()and来做Array.lastIndexOf()。就像首先从右侧搜索或最后一个未定义的值并在其中附加下一个数组然后再做一次。

最终的数组必须是这样的:

{
  0: {
    0: {
      0: 10,
      1: 21,
      2: "one"
    },
    1: {
      0: {
        0: 14,
        1: 24,
        2: "five"
      },
      1: 24,
      2: "two"
    },
    2: "three"
  },
  1: 32,
  2: "four"
}

标签: javascriptarrays

解决方案


您可以使用递归函数来执行此操作,代码:

var array = [
    { 0: undefined, 1: 32, 2: "four" },
    { 0: undefined, 1: undefined, 2: "three" },
    { 0: undefined, 1: 24, 2: "two" },
    { 0: 14, 1: 24, 2: "five" },
    { 0: 10, 1: 21, 2: "one" }
]

function tree(array) {
    let obj = array.shift();

    for (let [key, value] of Object.entries(obj).reverse())
        if (value === undefined)
            obj[key] = tree(array);

    return obj;
}

console.log(tree(array));


推荐阅读