как проверить и добавить свойства к объекту массива в javascript - PullRequest
0 голосов
/ 27 мая 2020

Я хотел бы знать, как добавить два ключа внутри объекта массива в javascript.

В объекте obj вместо заголовка добавить label and value в javascript.

Каждый дочерний ключ может иметь дочерний ключ, если у него есть дочерний ключ и ключ заголовка, добавьте метку и ключ значения в javascript

var obj = [
  {
    id: 1,
    title: "Category"
    children: [
    {
    id:1, 
    title: "countries", 
    children: [
        {title: "IN", id:1},
        {title: "TH", id:2},
        {title: "SG", id:3}
      ]
    }, {
    id:2, 
    title: "fields", 
    children: [
        {title: "Finance", id:1},
        {title: "Services", id:2}
      ]
    }
    ]
  }
]

function changeObj(obj){
    if (obj.length > 0) {
    var result = obj.map(e => {
      if('children' in e)
        e.children = e.children.map(child => {
          if ('children' in child) 
            child.children = child.children.map(c =>({
             label: c.title,
             value: c.title
              })
            );
            return child;
        });      
      return e
    });
    return result;
  }
}
Expected Output
 {
    label: "Category",
    value: "Category",
    children: [
    {
    label: "countries", 
    value: "countries",
    children: [
        {label:"IN",value:"IN", title: "IN"},
        {label:"TH",value:"TH", title: "TH"},
        {label:"SG",value:"SG", title: "SG"}
      ]
    },{
    label: "fields", 
    value: "fields",
    children: [
        {label: "Finance", value: "Finance",title: "Finance"},
        {label: "Services", value: "Services",title: "Services"}
      ]
    }
    ]
  }


Ответы [ 3 ]

0 голосов
/ 27 мая 2020

В современном синтаксисе JS это может быть реализовано так

let __f = (_) => {
    let {title, children} = _;
    const value = title;
    const label = title;
    let result;
    if (children && children.length) {
        result = {label, value, children: children.map(__f)};
    } else {
        result = {label, value, title};
    }
    return result;
};

let result = obj.map(__f).pop();
0 голосов
/ 27 мая 2020

в данном случае obj - это массив объектов, обозначенный [...]. Массивы можно перебирать с помощью встроенных функций. В вашем случае вы будете sh, чтобы взять каждый элемент в массиве и каким-то образом изменить его. В конце у вас будет такое же количество элементов, как и в начале.

Функция map передает каждый элемент в исходном массиве функции, заполняя новый массив результаты этой функции. В документации приведены примеры.

Вы должны решить, добавить ли метку и значение к объекту верхнего уровня, а затем удалить заголовок из объекта верхнего уровня. Когда у вас это получится, примените тот же подход к детям.

[{ a: 1 }, { a: 2 }].map(item => ({ ...item, b: item.a + 1 }));
// [{ a: 1, b: 2 }, { a: 2, b: 3 }]

Привыкайте читать документы, они будут вашим первым источником при решении проблемы.

0 голосов
/ 27 мая 2020

попробуйте.

function changeObj(obj) {
    if(!obj.length) return;

    obj.forEach(i => {
        const title = i.title;
        const child = i.children;

        if(i.id) {
            delete i.id;
        }
        if(i.title) {
            delete i.title;
        }
        
        i.label = title;
        i.value = title;

        if(child) {
            changeObj(child);
        } else {
            i.title = title;
        }
    });
    return obj;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...