Обновление вложенного значения объекта Javascript с помощью уникального ключа

1

Я хочу добавить уникальный id в каждый суб-комментарий, комментарий может иметь более 100, я получил этот объект в качестве ввода, и мне нужно добавить автоинкремент и вставить в базу данных, любая помощь будет оценена.

Я хочу обновить этот object

var objData =   {"comments":{
        "commentedBy" : "jaril1",
        "date" : "",
        "comment" : "Hello world",
        "subComments" : {
            "commentedBy" : "jaril 2",
            "date" : "",
            "comment" : "Hello world inside dark",
            "subComments" :{
                "commentedBy": "jaril 3",
                "date": "",
                "comment": "wow working great"
            }
        }
    }
}

К этому:

var objData =   {"comments":{
        "commentId":1,
        "commentedBy" : "jaril1",
        "date" : "",
        "comment" : "Hello world",
        "subComments" : {
            "commentId":2,
            "commentedBy" : "jaril 2",
            "date" : "",
            "comment" : "Hello world inside dark",
            "subComments" :{
                "commentId":3,
                "commentedBy": "jaril 3",
                "date": "",
                "comment": "wow working great"
            }
        }
    }
}
  • 0
    Это странно отформатировано. Свойства "comments" и "subComments" должны содержать массив, верно? Иначе у вас всегда будет ОДИН комментарий и субкоммент ...
  • 0
    Вы определили эту структуру или вы не имеете никакого влияния на нее?
Теги:

4 ответа

2
Лучший ответ

var objData = {"comments":{"commentedBy":"jaril1","date":"","comment":"Hello world","subComments":{"commentedBy":"jaril 2","date":"","comment":"Hello world inside dark","subComments":{"commentedBy":"jaril 3","date":"","comment":"wow working great"}}}}

var id=1
function updateComment(commenObj){
  return commenObj.subComments ? {...commenObj, commentId: id++, subComments: updateComment(commenObj.subComments)} : {...commenObj, commentId: id++}
}

console.log(updateComment(objData.comments))
1
var objData =   {"comments":{
     "commentedBy" : "jaril1",
     "date" : "",
     "comment" : "Hello world",
     "subComments" : {
         "commentedBy" : "jaril 2",
         "date" : "",
         "comment" : "Hello world inside dark",
         "subComments" :{
             "commentedBy": "jaril 3",
             "date": "",
             "comment": "wow working great"
         }
     }
 } };

 var Id = 1;
 objData.commentId = Id;

 function addCommentId(comments) {
    if (comments.subComments) {
      comments.subComments.commentId = Id++;
      addCommentId(comments.subComments);
    } 
    return comments;
 }

 var data = addCommentId(objData);
 console.log(data);
1

    const objData =   {"comments":{
            "commentedBy" : "jaril1",
            "date" : "",
            "comment" : "Hello world",
            "subComments" : {
                "commentedBy" : "jaril 2",
                "date" : "",
                "comment" : "Hello world inside dark",
                "subComments" :{
                    "commentedBy": "jaril 3",
                    "date": "",
                    "comment": "wow working great"
                }
            }
        }
    }

    let id = 1;
    function addId(obj) {
     obj.commentId = id++;
       if (obj.subComments) {
          addId(obj.subComments);
       }
    }
            
    addId(objData.comments);
    
    console.log(objData);

Это добавит commentId к каждому комментарию, независимо от того, сколько подкомпонентов есть.

1

Если для приращения нет дополнительных требований, вы можете сделать это с рекурсией, так как ваша структура данных рекурсивна.

Вы определяете рекурсивную функцию, такую как withId_ которая принимает объект и идентификатор, увеличивает идентификатор и затем вызывает себя в subComments если он существует:

const objData ={"comments":{
        "commentedBy" : "jaril1",
        "date" : "",
        "comment" : "Hello world",
        "subComments" : {
            "commentedBy" : "jaril 2",
            "date" : "",
            "comment" : "Hello world inside dark",
            "subComments" :{
                "commentedBy": "jaril 3",
                "date": "",
                "comment": "wow working great"
            }
        }
    }
}

const withId_ = ({ commentedBy, date, comment, subComments }, id) => {
  if (typeof subComments === 'undefined') {
    return { commentId: id + 1, commentedBy, date, comment };
 } else {
    let incrementedId = id + 1;
    return { commentId: incrementedId, commentedBy, date, comment, subComments: withId_(subComments, incrementedId) };
 }
};

const withId = (objectData) => withId_(objectData.comments, 0);

console.log(withId(objData));

ВЫХОД:

{
    "commentId": 1,
    "commentedBy": "jaril1",
    "date": "",
    "comment": "Hello world",
    "subComments": {
        "commentId": 2,
        "commentedBy": "jaril 2",
        "date": "",
        "comment": "Hello world inside dark",
        "subComments": {
            "commentId": 3,
            "commentedBy": "jaril 3",
            "date": "",
            "comment": "wow working great"
        }
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню