在数组对象中查找未定义的内容并插入对象。

3
这是我的数组。里面有多个对象,其中一些具有 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"}元素应替换它,并且应该形成新的对象{0: {0: undefined, 1: undefined, 2: "three"}, 1: 32, 2: "four"}
我知道Array.forEach可以做到这一点。 如果是类似的数组,我可以使用Array.splice()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"
}

可以这样做,首先从最后一侧搜索,如果它的值未定义,则追加它,然后再从新对象的右侧搜索,如果有,则追加。 - Coding
@Barmar 我试过了,但我不知道如何将其转换为对象,转换后变得很混乱。 - Coding
你可以使用 if (Object.values(element).some(el => el === undefined)) 来检查循环中当前元素是否存在任何 undefined 值。希望这能帮助你入门。 - Barmar
1个回答

4

您可以使用递归函数来实现,代码如下:

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));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接