Как обновить значение внутри объекта в объекте в JavaScript? - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть Объект с композицией BDM.Он включает в себя объект внутри объекта.

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

Я могу обновить Объект с тем же значением, однако я не смог 't получить динамическое значение с дочерним объектом.

Это объект, который у меня есть.

    $data.timerObjJson; 

        [
          {
            "persistenceId": 322,
             "persistenceId_string": "322",
             "persistenceVersion": 0,
             "persistenceVersion_string": "0",
             "recommandation": "Recommandation  1",
                     "timerTask": [
                            {
                              "persistenceId": 508,
                              "persistenceId_string": "508",
                              "persistenceVersion": 0,
                              "persistenceVersion_string": "0",
                              "title": "Task1",
                              "startdate": "2019-02-13",
                              "enddate": "2019-02-13",
                              "statusTask": "decline",
                              "declineReason": ""
                            },
                            {
                              "persistenceId": 511,
                              "persistenceId_string": "508",
                              "persistenceVersion": 0,
                              "persistenceVersion_string": "0",
                              "title": "Task1",
                              "startdate": "2019-02-13",
                              "enddate": "2019-02-13",
                              "statusTask": "decline",
                              "declineReason": ""
                            }
                          ],
                          "statusRec": "In process"
                        },
                        {
                          "persistenceId": 323,
                          "persistenceId_string": "323",
                          "persistenceVersion": 0,
                          "persistenceVersion_string": "0",
                          "recommandation": "Recommandation 2",
                          "timerTask": [
                            {
                              "persistenceId": 509,
                              "persistenceId_string": "509",
                              "persistenceVersion": 0,
                              "persistenceVersion_string": "0",
                              "title": "Task2",
                              "startdate": "2019-02-13",
                              "enddate": "2019-03-02",
                              "statusTask": "decline",
                              "declineReason": ""
                            },
                            {
                              "persistenceId": 509,
                              "persistenceId_string": "509",
                              "persistenceVersion": 0,
                              "persistenceVersion_string": "0",
                              "title": "Task2",
                              "startdate": "2019-02-13",
                              "enddate": "2019-03-02",
                              "statusTask": "decline",
                              "declineReason": ""
                            }
                          ],
                          "statusRec": "In process"
                        }
                      ] 

Это то, что я пытался получить, возвращая statusTask и

    $data.getDone:
    var obj = [];
    for(var i in $data.timerObjJson){
        for(var j in $data.timerObjJson[i].timerTask){

            var thisObj = {};
            thisObj = $data.timerObjJson[i].timerTask[j]; 
            obj.push(thisObj);
        }
    } 

    var objArray=[];
            for (var i = 0; i < obj.length; i++) {    
             objArray.push(obj[i].statusTask); 
    }

   function isBelowThreshold(currentValue) {
      return currentValue == "done";
   }
   return objArray.every(isBelowThreshold)

И я попытался обновить statusRec, используя let, как показано ниже

      var data = $data.timerObjJson; 
      var done = $data.getDone; //true or false 

      let arr = data;

      const status = "In process";
      if (done == true){
           arr.find(v => v.statusRec == status).statusRec = "DONE";
       }
      return data;

Но мне нужно обновить, чтобы каждый statusRec зависел от состояния timerTask.statusTask.

Например, один развсе timerTask.statusTask изменено «выполнено», statusRec должен измениться на «Готово».

Извините, вопрос сложный.Любая помощь будет оценена.

Спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Это хороший вопрос, на самом деле, если я правильно понял вопрос, вы ищете, если timerTask.statusTask имеет значение 'done' для обоих двух объектов, он меняет statusRec на 'done' одного и того же объекта, чтобы вы моглидостичь такого подхода с помощью метода массива фильтра в JavaScript, вот пример:

    let array = [
  {
    "persistenceId": 322,
     "persistenceId_string": "322",
     "persistenceVersion": 0,
     "persistenceVersion_string": "0",
     "recommandation": "Recommandation  1",
     "timerTask": [
        {
          "persistenceId": 508,
          "persistenceId_string": "508",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task1",
          "startdate": "2019-02-13",
          "enddate": "2019-02-13",
          "statusTask": "decline",
          "declineReason": ""
        },
        {
          "persistenceId": 511,
          "persistenceId_string": "508",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task1",
          "startdate": "2019-02-13",
          "enddate": "2019-02-13",
          "statusTask": "decline",
          "declineReason": ""
        }
      ],
      "statusRec": "In process"
    },
    {
      "persistenceId": 323,
      "persistenceId_string": "323",
      "persistenceVersion": 0,
      "persistenceVersion_string": "0",
      "recommandation": "Recommandation 2",
      "timerTask": [
        {
          "persistenceId": 509,
          "persistenceId_string": "509",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task2",
          "startdate": "2019-02-13",
          "enddate": "2019-03-02",
          "statusTask": "decline",
          "declineReason": ""
        },
        {
          "persistenceId": 509,
          "persistenceId_string": "509",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task2",
          "startdate": "2019-02-13",
          "enddate": "2019-03-02",
          "statusTask": "done",
          "declineReason": ""
        }
      ],
      "statusRec": "In process"
    }
]


function TheSameInAllObjects(status) {
  if (!(status && status.length)) return true; // If there is no status, or if it is empty, they are all the same, aren't they?
  let compare = status[0].statusTask;
  return status.every( item => item.statusTask === compare);
}

array.filter(data => {
   let obj = {}
   data['timerTask'].filter(result => {
    if(result.statusTask === 'done'){
      obj = data
      if(TheSameInAllObjects(obj['timerTask']) === true){
        return data.statusRec = 'done'
      }
    }
  })
})

console.log(array)

, и вы можете проверить, что оба имеют одно и то же значение 'done'

let array = [
  {
    "persistenceId": 322,
     "persistenceId_string": "322",
     "persistenceVersion": 0,
     "persistenceVersion_string": "0",
     "recommandation": "Recommandation  1",
     "timerTask": [
        {
          "persistenceId": 508,
          "persistenceId_string": "508",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task1",
          "startdate": "2019-02-13",
          "enddate": "2019-02-13",
          "statusTask": "decline",
          "declineReason": ""
        },
        {
          "persistenceId": 511,
          "persistenceId_string": "508",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task1",
          "startdate": "2019-02-13",
          "enddate": "2019-02-13",
          "statusTask": "decline",
          "declineReason": ""
        }
      ],
      "statusRec": "In process"
    },
    {
      "persistenceId": 323,
      "persistenceId_string": "323",
      "persistenceVersion": 0,
      "persistenceVersion_string": "0",
      "recommandation": "Recommandation 2",
      "timerTask": [
        {
          "persistenceId": 509,
          "persistenceId_string": "509",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task2",
          "startdate": "2019-02-13",
          "enddate": "2019-03-02",
          "statusTask": "done",
          "declineReason": ""
        },
        {
          "persistenceId": 509,
          "persistenceId_string": "509",
          "persistenceVersion": 0,
          "persistenceVersion_string": "0",
          "title": "Task2",
          "startdate": "2019-02-13",
          "enddate": "2019-03-02",
          "statusTask": "done",
          "declineReason": ""
        }
      ],
      "statusRec": "In process"
    }
]


function TheSameInAllObjects(status) {
  if (!(status && status.length)) return true; // If there is no status, or if it is empty, they are all the same, aren't they?
  let compare = status[0].statusTask;
  return status.every( item => item.statusTask === compare);
}

array.filter(data => {
   let obj = {}
   data['timerTask'].filter(result => {
    if(result.statusTask === 'done'){
      obj = data
      if(TheSameInAllObjects(obj['timerTask']) === true){
        return data.statusRec = 'done'
      }
    }
  })
})

console.log(array)

Я обновил свой ответ для достижения вашей цели

0 голосов
/ 13 февраля 2019

как вы можете обновить объект:

var object = {
  "name": "aziz",
  "address": {
    "ville": "MTL",
    "street": {
      "name": "Bonnier",
      "number": 8012
    }
  }
}


object = { ...object,
  address: { ...object.address,
    street: {
      ...object.address.street,
      number: 9000
    }
  }
}

console.log(object);

var object2 = {
  "name": "aziz",
  "address": {
    "ville": "MTL",
    "street": {
      "name": "Bonnier",
      "number": 8012
    }
  }
}


/* 2 method */
object2.address.street.number = 10000;

console.log(object2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...