Javascript: Коллекция с альбомами (JS 91)
-
Здравствуйте!
Есть затруднение с данным заданием. Невозможно изменить аргументы функции, все время выдает одно и то же.
id = 2548; prop = "tracks"; value = "".
Заранее спасибо.
-
Киньте правильный код кто нибудь, не могу понять вообще задачу, в консоле выполняю все нормально
-
@artemv @trixpk надо просто реализовать цепочку условий, подскажу на псевдокоде:
function updateRecords(id, prop, value) { // если (value === "") { // удаляем свойство prop из альбома ( для доступа используем collection[id][prop] ) // } иначе если (prop === "tracks") { // если в альбоме отсутствует свойство "tracks", то создайте пустой массив, присвойте этот массив отсутствующему свойству в альбоме // и надо добавьте value в конец существующего массива tracks. // } иначе { // Случай когда prop содержит значение !== "tracks" и value !== ""), // установить новое значение value свойству с именем prop ( collection[id][prop] = новое_значение ) // } }
-
Ну примерно так я и думал. Вот код:
// Инициализация var collection = { "2548": { "album": "Slippery When Wet", "artist": "Bon Jovi", "tracks": [ "Let It Rock", "You Give Love a Bad Name" ] }, "2468": { "album": "1999", "artist": "Prince", "tracks": [ "1999", "Little Red Corvette" ] }, "1245": { "artist": "Robert Palmer", "tracks": [ ] }, "5439": { "album": "ABBA Gold" } }; // Копия коллекции для тестов var collectionCopy = JSON.parse(JSON.stringify(collection)); // Измените код только под комментарием. 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 value; } // Измените значение аргумента для проверки updateRecords(5439, "artist", "ABBA"); updateRecords(5439, "artist", "ABBA");
-
Вот если заменить строчку "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; }