найдите неопределенное внутри объекта массива и вставьте объект

#javascript #arrays

Вопрос:

Это мой массив. У меня в нем несколько объектов, некоторые из которых имеют значения 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"
}
 

Комментарии:

1. Это можно сделать, например, сначала выполнить поиск с последней стороны, если она имеет неопределенное значение, затем добавить ее, а затем снова выполнить поиск с правой стороны нового объекта, если он был добавлен.

2. @Barmar Я сделал, я не знаю, как это сделать, конвертируйте объекты, когда я конвертирую, это становится грязным

3. Вы можете использовать if (Object.values(element).some(el => el === undefined)) его для проверки наличия каких-либо undefined значений в текущем элементе цикла. Я надеюсь, что это поможет вам начать.

Ответ №1:

Для этого вы можете использовать функцию рекурсии, код:

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