Javascript: Коллекция с альбомами (JS 91)



  • Вот если заменить строчку "return collection" на "return id+" "+prop+" "+value;". То при запросе: "updateRecords(5439, "artist", "ABBA");" выдает "updateRecords(5439, tracks, "" "ABBA");".
    В "локале" код работает.



  • @artemv Созданная вами функция должна всегда возвращать объект коллекции.



  • Функцию засчитывает.Но есть одна проблема.
    Альбом 2548
    Теряет свои изначальные значения при вызове функции.
    Так и должно быть или нет? по заданию так и не понял.
    Codepen

    // Измените код только под комментарием.
    function updateRecords(id, prop, value) {
    if(value === ""){
    delete collection[id][prop];
    }
    else if(prop === "tracks" && collection[id].hasOwnProperty(prop) == false){
    collection[id][prop] = [value];
    }
    else if (prop !== "tracks" && value !== ""){
    collection[id][prop] = value;
    }
    else if(prop === "tracks" && value !== "") {
    collection[id][prop].push(value);
    }
    return collection;
    }
    //P.s. Знатно попотел.



  • Участник @artemv написал в Javascript: Коллекция с альбомами (JS 91):

    function updateRecords(id, prop, value) {
    if (collection[id].tracks !== prop && value !== "") {
    collection[id].prop = value;
    } else if (collection.hasOwnProperty['track'] === false && prop === "tracks") {
    collection[id].tracks.push(value);
    } else if (prop === "track" && value !== "") {
    collection[id].prop = value;
    } else if (value === "") {
    delete collection[id].prop;
    };
    return

    Ну не работает этот код тоже



  • if (prop !== "tracks" && value !== "") {
    collection[id][prop] = value;
    } else if (prop === "tracks" && collection[id].hasOwnProperty("tracks") === false) {
    var arr = [];
    collection[id][prop] = arr;
    arr.push(value);
    } else if (prop === "tracks" && value !== '') {
    collection[id][prop].push(value);
    } else if (value === '') {
    delete collection[id][prop];
    }
    return collection;
    }



  • Получилось!!!!
    function updateRecords(id, prop, value) {
    if (value === ""){
    delete collectionCopy[id][prop];
    } else if (prop === "tracks"){
    if (!collectionCopy[id].hasOwnProperty(prop)){
    collectionCopy[id][prop] = [];
    }
    collectionCopy[id][prop].push(value);
    }else{
    collectionCopy[id][prop] = value;
    }
    return collectionCopy;
    }



  • Так как я новенький, и мне вроде как интересно, пробовал извращаться и со switch'ом.
    К сожалению, отношения с ним не сложились, один из тестов он не хотел решать. В прочем, это и понятно, ведь switch хорош только там, где нет кучи условий. А так, вот, если кому надо:

    function updateRecords(id, prop, value) {  
    var valid = collection[id].hasOwnProperty(prop);  
     if ( value === "") {    
        delete collection[id][prop];  
      } else if (prop === "tracks") {
        if (!valid) {      
          collection[id][prop] = [];
        }                              
        collection[id][prop].push(value);     
      } else {    
        collection[id][prop] = value;
      }
      return collection;
    }


  • Собственно можно так:

    function updateRecords(id, prop, value) {
      if (value == "") {
        delete collection[id][prop];
      } else if (prop != "tracks"){
        collection[id][prop] = value;
      } else {
        if (!collection[id].hasOwnProperty(prop)) {
          collection[id][prop] = [];
        }
        collection[id][prop].push(value);
      }
        return collection;
    }
    

    Ещё такой вариант:

    function updateRecords(id, prop, value) {
      if (value != "") {
        if (prop != "tracks") {
          collection[id][prop] = value;
        } else {
          if (!collection[id].hasOwnProperty(prop)) {
            collection[id][prop] = [];    
          } 
          collection[id][prop].push(value);
        } 
      } else {
        delete collection[id][prop];
      }
        return collection;
    }
    

    Ну и так тоже можно, немного извращённо:

    function updateRecords(id, prop, value) {
      if (value != "") {
        if (prop != "tracks") {
          collection[id][prop] = value;
        } else {
          switch (collection[id].hasOwnProperty(prop)) {
            case false:
              collection[id][prop] = [];
            case true:
              collection[id][prop].push(value);
              break;
          }
        } 
      } else {
        delete collection[id][prop];
      }
        return collection;
    }  
    


  • Эта запись удалена!


  • в чем ошибка?

    if (prop !== "tracks" && value !== "") {
    collestion[id][prop] = value;
    } else if (prop != "tracks") {
    collection[id][prop] = [];
    collection[id][prop] = push(value);
    } else if (collection[id].hasOwnProperty(prop) && collection[id].hasOwnProperty(value) ){
    collection[id][prop] = push(value);
    } else if (value == ""){
    deleted collection[id][prop];
    }



Похоже, подключение к Форум DoCode было разорвано, подождите, пока мы пытаемся восстановить соединение.