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